RedisインストールからRecommendifyの動作確認まで
ひさびさ、1年ぶりのプログラミング記事です。
Redisを使ったレコメンドエンジン「Recommendify」の動作確認をします。
参考:Recommendifyで気軽にレコメンドエンジンに触れてみるAdd Star
redis本体のインストール
sudo port -d sync
sudo port install redis
ついでにgemもインストール
cd ~/project
rvmsudo gem install redis
redisの起動と確認
$ sudo redis-server /opt/local/etc/redis.conf &
$ redis-cliredis 127.0.0.1:6379> set a 1
OK
redis 127.0.0.1:6379> get a
"1"
redis 127.0.0.1:6379> exit$ redis-cli shutdown
recommendifyのインストール その1
$ rvmsudo gem install recommendify
...
recommendify.c:4:29: error: hiredis/hiredis.h: No such file or directory
hiredisがないらしい。よく分からないけど、それもインストールしときましょう。
(macportsがなかったので、手動で)
git clone https://github.com/redis/hiredis.git && cd hiredis && make && sudo make install
んでもって、リトライ。
$ rvmsudo gem install recommendify
Building native extensions. This could take a while...
Successfully installed recommendify-0.3.8
1 gem installed
はい、オッケー。
既存のRailsプロジェクトに組み込みたかったので、Gemfileに
gem 'redis'
gem 'recommendify'
を追記して bundle update を通してみるも問題なし。
んで、この記事
参考:Recommendifyで気軽にレコメンドエンジンに触れてみるAdd Star
の「5. トラッキングデータの登録」と「6. レコメンドデータの取得」をrails cにコピペでつっこんだら、動きました。
というわけで、準備はこんな感じかな、と。
Mac使いがRuby1.9とRails3のプロジェクトに参戦したときの話
久しぶりのプログラミング仕事で、Railsを触っている。
以前のプロジェクトでRails3には慣れたけど、手元のRubyはバージョン1.8.7のままだった。
今回は1.9.3を使うっていうことなので、環境の整備をした次第。
新しいrubyをインストールしてみる、、、成功。
rvm install ruby-1.9.3-p194
次にgit clone してきたRails3の新しいプロジェクトで
bundle install
を実行したらエラー発生
ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:799: [BUG] Segmentation fault
だそうな。。
まぁ、そうだよね、世の中甘くないよね。
そんな僕に、Google先生からのオススメはこちら↓
RVM vs. MacPorts and the BUG Segmentation fault
参考ページを見ながら、以下の手順を実行する。
(1)$HOME/.rvmrc に以下を追加して、sourceしておく
export CFLAGS="-O2 -arch x86_64" export LDFLAGS="-L/opt/local/lib" export CPPFLAGS="-I/opt/local/include"
(2)古いrubyも再インストールしておく
rvm reinstall 1.8.7 --with-openssl-dir=/opt/local
(3)本命の新しいrubyをインストールしてみる...が。
sudo port install libyaml rvm reinstall ruby-1.9.3-p194 --with-opt-dir=/opt/local
ここでcurlの証明書エラーみたいのが発生。
curl: (60) SSL certificate problem, verify that the CA cert is OK. D
このエラーに対するGoogle先生のオススメはこちら↓
Stack Overflow
Curl Certificate Error when Using RVM to install Ruby 1.9.2
このコマンドを打てばお終い、と↓
curl -L get.rvm.io | bash -s stable
で、さっきの新しいrubyのインストールをやり直し
rvm reinstall ruby-1.9.3-p194 --with-opt-dir=/opt/local
今度は成功!
次はbundle installのやり直し、、、だが、しかし。
ZenTest requires RubyGems version ~> 1.8. Try 'gem update --system' to update RubyGems itself.
gemが古いんだと。久しぶりだといろいろ出るなぁ。。
Google先生曰く↓
gem update がうまくいかないときのメモ
以下のコマンドでgemをupdate
gem install rubygems-update update_rubygems
gemのupdateが終わったらbundle installの3度目の正直、、、失敗。
Installing capybara-webkit (0.12.1) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
だってさ。
Installing Qt and compiling capybara webkit
↑ここを参考にこちら↓を実行
sudo port install qt4-mac-devel
かーらーのー、本日4度目の bundle install を実行した結果は...
Your bundle is complete!
よしよし、一件落着。
Rails3をはじめてすぐに勉強したことリスト
MacBook Air 11インチ欲しい!いとうまさしです。
-
-
- -
-
プロジェクト作るときは
$ rails new プロジェクト名
コントローラー作るときは
$ rails g controller コントローラー名
モデル作るときは
$ rails g model モデル名 「フィールド名:型」の繰り返し
例えば
$ rails g model user name:string email:string birthday:date
みたいな。
サーバの起動は
$ rails server
コンソールの起動は
$ rails console
-
-
- -
-
利用するgemはRAILS_ROOTのGemfileに書く。
gem 'haml-rails'
といった具合。
Gemfileにgemを追加したらRAILS_ROOTから
bundle install
を実行(bundleだけでもオッケー)するとgemをインストールしてくれる。
依存関係も考えていろいろ入れてくれる。
-
-
- -
-
Rackっていうのは
「Railsフレームワークに依存せず、直接Webサーバーとやり取りして、何か機能を実現してくれるミドルウェア」←僕なりの理解であって、正式には違うかも。
例えばOmniAuthというRackなgemはRails側に何も書かなくても
/auth/twitter
のリクエストを勝手に受け取って、勝手にTwitterと認証のための通信をしてくれる。
RailsプログラマーはOmniAuthから
/auth/twitter/callback
に飛ばされてきたリクエストの面倒を見るだけ、みたいな。
-
-
- -
-
ユーザー認証はrestful_authenticationじゃなくてDeviseが良いっぽい。
ファイル添付はfile_columnじゃなくてPaperclipが良いっぽい。
Mac+RVM+Ruby1.9.2+Rails3の環境作り
RVM(Ruby Version Manager)のインストール
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
.bash_profileの末尾に以下を追記
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.
.bash_profileの変更を反映
$ source .bash_profile
RVMでインストールできる環境を一覧表示
$ rvm list known # MRI Rubies [ruby-]1.8.6[-p399] ... # JRuby jruby-1.2.0 ... # Ruby Enterprise Edition ree-1.8.6 ...
ruby 1.9.2をインストールしてみる
$ rvm install ruby-1.9.2-rc2
インストールしたrubyを使いますよ、と。
$ rvm use ruby-1.9.2-rc2 $ ruby -v ruby 1.9.2dev (2010-07-11 revision 28618) [i386-darwin9.8.0]
もともと入ってたバージョンに切り替えますよ、と。
$ rvm reset $ ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]
rubyが利用するgem環境も複数作る(rails2, rails3用で分ける)
$ rvm use ruby-1.9.2-rc2 $ rvm gemset create rails2 $ rvm gemset create rails3 $ rvm gemset use rails3
今作ったrails3環境にrails3をインストール。
$ gem install rails3b $ gem install rails --version=3.0.1
とりあえず以上です。
WordPressでドメインの引越しをするときのSQL
WordPressで運営中のブログをリニューアルしようと思ってる。
そこでリニューアルの作業をするために現状のサイトをコピーして、テストサイトを作りたい。
とりあえず以下の手順でテストサイトができた。
・テスト用のサブドメイン作成
・本番サイトのWordPressフォルダをコピーしてテストサイト用のフォルダ作成
・現状のデータベースをダンプ
・新しいデータベースを作って、そこにリストア
・テストサイト用のVirtualHostの設定をApacheに追加&再起動
・以下のSQLを実行
update wp_options set option_value = 'テストサイトのURL' where option_name = 'home';
update wp_options set option_value = 'テストサイトのURL' where option_name = 'siteurl';
update wp_posts set guid = REPLACE(guid, '本番サイトのURL', 'テストサイトのURL');
ま、そんな感じ。
bit.lyで短縮URLを作る手順
- 元々のURLをコピーしてクリップボードに保存しておきます。
- http://bit.ly/ にアクセスします。
- 「Shorten with bit.ly」と書かれたフォームにURLをペーストします。
- 「Shorten」ボタンを押します。
- 「Your link →」というエリアが現れます。その横に短縮URLが表示されます。
- しばらくまって http://bit.ly にアクセスします。
- ページの中段まで下がると、短縮URLをクリックしてくれた人の人数が表示されています。
background_fuで「あとでやる」処理を書く
railsを使って「あとでやる」処理を実現する方法について
rubyのMLに回答をしてみたので、内容をここにも書いておきます。
質問メールは以下の通り。
RubyもRailsも初心者なのですが、 現在、Railsで簡単なtwitterのbotを作成しています。 Railsで作った設定画面から、投稿間隔の設定を 行い、後で変更できるようにもしたいのですが、 良いやり方がいまいち思いつかず、 困っています。 今のところ、考えているものは以下です。 1、cronで実行 2、backgroundrbで実行 3、タイマーでループ回して処理 (投稿間隔はDBから取得) 投稿間隔の設定ができるボット作成サイトなどは、 結構あるみたいなので、なんらかの方法でできると 思うのですが、恥ずかしながら、やり方がわからず、 質問させていただきました。できれば簡単な方法 でやりたいと思っています。
僕の回答は以下。
> > 2、backgroundrbで実行 > > 3、タイマーでループ回して処理 background_fu を使って投稿の間隔を設定する方法を大雑把に紹介します。 (タイマーうんぬんはbackground_fuの仕組みがケアしてくれます。) background_fu は以下な感じでデーモンとして起動させておきます。 ruby script/daemons start デーモンはjobsテーブルを5秒間隔(設定で変更可能)で selectします。 処理してよいJobがあれば実行します。 (処理してよい => 未処理 && 開始時刻過ぎてる) 実行する処理はlib/worker以下にクラスを作っておきます。 JobにはWorkerのクラス名、メソッド名、引数、実行開始時刻 を入れておきます。 Job.create! :worker_class => 実行するWorkerのクラス名, :worker_method => 実行するWorkerのメソッド名, :args => メソッドの引数, :start_at => 実行開始時刻 みたいな感じ。