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_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 start
httpd.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'

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: ruby 1.9 で fastladder

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3102

コメントする

このブログ記事について

このページは、falseが2013年11月10日 12:48に書いたブログ記事です。

ひとつ前のブログ記事は「FreeBSD 8 で Qt 5.1.1を動かす」です。

次のブログ記事は「サーバ逝く」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1