redmineをportupgradeしようとしたら、redmineはruby 1.9を要求していて、今インストールされているruby 1.8と競合していた。
さらに、portsディレクトリや、/usr/ports/UPDATINGを見たところ、FreeBSDはシステムのrubyを1.8から1.9に変更して、さらにportsは1.8をもうサポートしないらしい。
今うちでrubyを使っているのは何かと調べたところ、fastladder と tiarra、wig.rbくらい。(ってwassrはサービス終了しているから、wig.rbは動いている意味がないな)
問題はfastladderで、随分古いrails(2.0.2)を使っているし、少し自分で手を入れたりしているので、動かない可能性が高い。
んで、ruby 1.9 で誰か動かしていないかな〜と思って探したところ、github にfastladder/fastladderを発見。
Gemfileを見ると、rails 4.0.0に対応しているらしい。
これが使えれば、ruby 1.9に移行できると思い、早速 git clone。
と、その前に、ruby 1.9をインストール。
README.md の通りに、bundle installして、config/database.yml.sqlite3をconfig/database.yml にコピーして、bundle exec rake db:create db:migrate してみた。
そして、bin/rails server とやると、mongrel?がポート3000で立ち上がるので、ブラウザから:3000にアクセスすると、普通に動くっぽい。
これなら行ける!と思ってdb/schema.rb を古いものと比較してみても、書き方が変わっているだけでDBのテーブル構造自体は変わっていないように見える。
そこで、試しに今のDBの内容をテスト用のDBに流し込んで、そのまま使えるか見てみる。
起動しようとしたら、pgがないよ的なことを言われたので、Gemfile に require 'pg' を追加。
これでmongrelを起動して、アクセスしてみると、PendingMigrationError とか言われてしまう。
schema.rbに書いてあるversionが悪いのかな〜と思って、古いのと同じ8にしてみても状況変わらず。
しょうがないので、sqlite3 db/development.sqlite3 して、.schema でスキーマを見比べてみると、古いものはschame_infoと言うテーブルがあるのに対し、新しいものは schema_migrations と言うテーブルがある。両方共カラムはversionだけだが、古いものはintで新しいものはvarchar(255)だ。
それ以外は同じように見えるので、コピーしたデータベースにschema_migrationsテーブルだけ足してみることにする。
とりあえず、postgresにダミーのDBを作って、DBを作りなおして、ダンプしてschema_migrationsテーブルの情報を取り出すことにする。
後は、ruby 1.9 用に passenger を入れなおして、apacheの設定を新しい passenger 用に変更すれば行けるはず。
これで行ける〜!と思ってアクセスしてみたら、gemが足りないからbundle installしろと言われる。
bundle installしても変わらず。
しばらく悩んだ後で、--deploymentオプションをつけてみたら、vender/bundle にインストールされてうまくいったっぽい。(Passenger is preventing Bundler from seeing my git gems - nginx, deployment, phusion-passenger, rvm, bundler - TechQues.com)
reader.jsってなんだろーと思って調べてみると、app/assets/javascripts/ にあり、public/javascriptsにはない。そして、config/environments/production.rb では、config.assets.precompile に出てくるが、development.rb には出てこない。
なんだろなーと調べていると、Rails3.1のAsset Pipelineと仲良くなる -と言うサイトを発見。
ここを見習って、以下のようにしたら今度こそうまくアクセスできるようになった。(最初、precompileについてだけ調べていて、RAILS_ENVを指定しないで実行して、うまくいかなくて悩んだ)
これで、ruby 1.9 環境に移行することができたのでした。github の fastladderのcontrobutorの方々に感謝。
さらに、portsディレクトリや、/usr/ports/UPDATINGを見たところ、FreeBSDはシステムのrubyを1.8から1.9に変更して、さらにportsは1.8をもうサポートしないらしい。
今うちでrubyを使っているのは何かと調べたところ、fastladder と tiarra、wig.rbくらい。(ってwassrはサービス終了しているから、wig.rbは動いている意味がないな)
問題はfastladderで、随分古いrails(2.0.2)を使っているし、少し自分で手を入れたりしているので、動かない可能性が高い。
んで、ruby 1.9 で誰か動かしていないかな〜と思って探したところ、github にfastladder/fastladderを発見。
Gemfileを見ると、rails 4.0.0に対応しているらしい。
これが使えれば、ruby 1.9に移行できると思い、早速 git clone。
と、その前に、ruby 1.9をインストール。
README.md の通りに、bundle installして、config/database.yml.sqlite3をconfig/database.yml にコピーして、bundle exec rake db:create db:migrate してみた。
そして、bin/rails server とやると、mongrel?がポート3000で立ち上がるので、ブラウザから:3000にアクセスすると、普通に動くっぽい。
これなら行ける!と思ってdb/schema.rb を古いものと比較してみても、書き方が変わっているだけでDBのテーブル構造自体は変わっていないように見える。
そこで、試しに今のDBの内容をテスト用のDBに流し込んで、そのまま使えるか見てみる。
% pg_dump -f db.dump fastladder_production % createdb fastladder_development % psql fastladder_development -f db.dumpこんな感じでDBをコピーして、config/database.ymlをpostgres用に直して、fastladder_developmentを指定してみる。
起動しようとしたら、pgがないよ的なことを言われたので、Gemfile に require 'pg' を追加。
これでmongrelを起動して、アクセスしてみると、PendingMigrationError とか言われてしまう。
schema.rbに書いてあるversionが悪いのかな〜と思って、古いのと同じ8にしてみても状況変わらず。
しょうがないので、sqlite3 db/development.sqlite3 して、.schema でスキーマを見比べてみると、古いものはschame_infoと言うテーブルがあるのに対し、新しいものは schema_migrations と言うテーブルがある。両方共カラムはversionだけだが、古いものはintで新しいものはvarchar(255)だ。
それ以外は同じように見えるので、コピーしたデータベースにschema_migrationsテーブルだけ足してみることにする。
とりあえず、postgresにダミーのDBを作って、DBを作りなおして、ダンプしてschema_migrationsテーブルの情報を取り出すことにする。
% createdb hoge % vi config/database.yml (データベースの接続先をhogeにする) % bundle exec rake db:create db:migrate % pg_dump -f hoge.dump hoge % vi hoge.dump (schema_migrationsテーブル関連だけ残して他を消す) % psql fastladder_development -f hoge.dump (schema_migrationsを入れる) vi config/database.yml (データベースの接続先をfastladder_developmentに戻す)これで起動して試してみると、見事に読めることを確認。
後は、ruby 1.9 用に passenger を入れなおして、apacheの設定を新しい passenger 用に変更すれば行けるはず。
# gem install passenger # passenger-install-apache2-module # vi /usr/local/etc/apache22/httpd.conf (Passengerの設定変更) # /usr/local/etc/rc.d/apache22 stop # /usr/local/etc/rc.d/apache22 starthttpd.confの変更は以下の様な感じ
diff --git a/apache22/httpd.conf b/apache22/httpd.conf index 69044b1..292c143 100644 --- a/apache22/httpd.conf +++ b/apache22/httpd.conf @@ -288,19 +288,24 @@ -LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so +LoadModule passenger_module /usr/local/lib/ruby/gems/1.9/gems/passenger-4.0.23/buildout/apache2/mod_passenger.so -# Passenger -PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.5 -PassengerRuby /usr/local/bin/ruby18 +# Passenger 1.9 +PassengerRoot /usr/local/lib/ruby/gems/1.9/gems/passenger-4.0.23 +PassengerDefaultRuby /usr/local/bin/ruby19基本はpathが変わってるだけだけど、PassengerRubyディレクティブがPassengerDefaultRubyに変わってる あ、設定に合わせて、古いfastladderの置いてあった場所に新しいfastladderを置く。
これで行ける〜!と思ってアクセスしてみたら、gemが足りないからbundle installしろと言われる。
bundle installしても変わらず。
しばらく悩んだ後で、--deploymentオプションをつけてみたら、vender/bundle にインストールされてうまくいったっぽい。(Passenger is preventing Bundler from seeing my git gems - nginx, deployment, phusion-passenger, rvm, bundler - TechQues.com)
# bundle install --deployment今度こそ!と思ってアクセスしても、やっぱりうまくいかない。fastladderのlog/production.logを見ると、reader.jsにアクセスが来てるけど、reader.jsなんて知らないと言うエラーが出ている。
reader.jsってなんだろーと思って調べてみると、app/assets/javascripts/ にあり、public/javascriptsにはない。そして、config/environments/production.rb では、config.assets.precompile に出てくるが、development.rb には出てこない。
なんだろなーと調べていると、Rails3.1のAsset Pipelineと仲良くなる -と言うサイトを発見。
ここを見習って、以下のようにしたら今度こそうまくアクセスできるようになった。(最初、precompileについてだけ調べていて、RAILS_ENVを指定しないで実行して、うまくいかなくて悩んだ)
# bundle exec rake assets:precompile RAILS_ENV=productionあ、本来は script/crawler とかを動かさないとクロールしてくれないけど、うちの環境はplaggerでfastladderのDBに入れているので、fastladder自身のクローラーは動かさない。
これで、ruby 1.9 環境に移行することができたのでした。github の fastladderのcontrobutorの方々に感謝。
2013/11/11追記
しばらく使ってみて、どうも一度読んだ記事が何度も出てくることに気づいた。さらに、記事の時間がずれていることにも。(10 hours ago とかに混じって、3 hours afterとか出てくるし)
時間がずれると言えばタイムゾーンと言うことで調べてみたら、Rails3系のtimezoneの扱いに関するメモ - Qiita [キータ]を発見。
時間のずれを見ると、どうも9時間(UTCとJSTの差)ちょうどじゃないのが気持ち悪いんだけど、とりあえずここに書いてあるとおりに、以下の記述をconfig/application.rb に追加してみた。
config.active_record.default_timezone = :local config.time_zone = 'Tokyo'
カテゴリ
FreeBSDトラックバック(0)
このブログ記事を参照しているブログ一覧: ruby 1.9 で fastladder
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3102
コメントする