kenanのブログ

闘病生活

rails勉強中でのメモ(修正)

4月ぐらいに買ってた「ruby on railsによるwebアプリケーションスーパーサンプル」という本を最近やってて
pluginのインストールのところでenginesとlogin_engineを入れる部分でつまずいたのでメモ。

現在の環境であるMacBookに入ってるRailsが1.2.6

Railsの最新版は2.0.2で、pluginであるenginesの最新版が2.0系。
実際に本で紹介されてるのは最新版を取得と書いてあるけど1.2系なのでpluginをインストールするときは

ruby script/plugin install http://svn.rails-engines.org/engines/tags/rel_1.2.2/

ruby script/plugin install http://svn.rails-engines.org/engines/tags/rel_1.2.0

とかやらないとenginesの2.0系とかが入ってくるので、rails2.0以降で使ってください!とおこられてしまう。

同じようにlogin_engineも落としてきた。

kenan% ruby script/plugin install http://svn.rails-engines.org/login_engine/tags/rel_1.0.4/

ruby script/plugin install http://svn.rails-engines.org/login_engine/tags/rel_1.0.2/

バージョンが間違っていたようです。

kenan% ruby script/generate plugin_migration
exists db/migrate
create db/migrate/003_login_engine_to_version_2.rb


うまくできたー

次はrake db:migrateでMySQLのバージョンによるSQLの問題がでたので考え中。

generate plugin_migrationで作成した003_login_engine_to_version_2.rbも正常に作り直すと
003_login_engine_to_version_1.rbとなるはず。

なんかgenereteスクリプトがうまく動かなかったので手直ししちゃいました。(良くないことだろうけど。。。

class LoginEngineToVersion2 < ActiveRecord::Migration
def self.up
Rails.plugins["login_engine"].migrate(2)
end

def self.down
Rails.plugins["login_engine"].migrate(0)
end
end

となっていたのを以下のように直しました。

class LoginEngineToVersion1 < ActiveRecord::Migration
def self.up
Rails.plugins["login_engine"].migrate(1)
end

def self.down
Rails.plugins["login_engine"].migrate(0)
end
end

本についてたサンプルで出力されたファイルと同じソースなので大丈夫でしょう。

これでdb:migrationもうまく行ってlogin認証機能が追加できました。



作業メモ:rake db:migrate すると undefined method `last' for {}:Hash と出る。

結論:rakeのバージョンがおかしい。

gem list rake

LOCAL GEMS ***

rake (0.8.1, 0.7.3)

にて現在入っているrakeバージョンを確認

0.7.3を使いたいので

rake _0.7.3_ db:migration

すれば任意のバージョンを使用できる。