Rails 2.0 移行ログ
RanaPrunusを Rails 2.0 に開発を移行したのでそのログ。
新しく Rails 2.0 のプロジェクト作成
とりあえず古いゴミ (scriptsフォルダとかenvironmentフォルダとか) が嫌だったので、rails rana
で新しくプロジェクトを作成。その後、appフォルダやlibフォルダ、vendorフォルダなどを新しいプロジェクトにコピーした。
environment.rb
セッション管理のデフォルトが Cookie ベースになったのでそれ用にenvironment.rbを修正。
以下を参考にした。
とりあえずconfig.action_controller.sessionに渡す:secretキーは他の人にばれちゃいけないらしい。けど、RanaPrunusはオープンソースにしてるから、environment.rbは見放題じゃないか、困ったな、ということで以下のようにsecretを設定するようにした。
secret = ''
secret_path = File.join(RAILS_ROOT, 'aphrael', 'secret.txt')
if File.exist?(secret_path)
secret = open(secret_path) { |io| io.read }
secret = secret.gsub(/\s/, '')
end
if secret.empty?
characters = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
secret = Array.new(78){characters[rand(characters.size)]}.join
open(secret_path, 'w') { |io| io.write(secret) }
end
config.action_controller.session = {
:session_key => '_rana3_session',
:secret => secret
}
secretキーをファイルから読むようにして、ファイルが存在してなかったら生成、と。
CSRF対策
ApplicationController にCSRF対策用のコードを追加。
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
# See ActionController::RequestForgeryProtection for details
# Uncomment the :secret if you're not using the cookie session store
protect_from_forgery #:secret => '88c6b7acfd7e8c817b8eb0a98bed54c3'
Cookie Storeを使っているのでsecretはいらないらしい。(コメントアウトのままにしておく。)
1.2 用のREST関数を 2.0に
1.2の場合、
map.resources :blogs, :member => {:rebuild=>:get} do |blogs|
blogs.resources :entries
end
って感じでリソースをネストしてた場合、entry用のURLは、entry_path(@blog)
だったんだけど、2.0になったらblog_entry_path(@blog)
になったようなので、ビューでパスを生成してるところすべてにblog_を付け足す。
めんどくせー。
rhtml -> html.erb
まあこれはそのままでも動くんだけど、erbを使ってhtmlを生成するテンプレートの拡張子は「html.erb」が推奨らしいので全部置き換える。
#!/usr/bin/env ruby
EXT_RHTML = /rhtml$/
def dir_scan(path)
Dir.entries(path).each do |file|
#puts file
file_path = path + '/' + file
if File.directory?(file_path)
dir_scan(file_path) if file != '.' && file != '..' && file != '.svn'
elsif EXT_RHTML =~ file
changed_path = file_path.gsub(EXT_RHTML, 'html.erb')
puts changed_path
`svn mv #{file_path} #{changed_path}`
end
end
end
dir_scan(Dir.pwd)
TextMate でシンタックスハイライト
ビューのテンプレートの拡張子がhtml.erbになってしまったので、TextMateでシンタックスハイライトされなくなってしまった!
というわけで、TextMateのBundleをいじる。
メニューの「Bundles」-「Bundle Editor」-「Show Bundle Editor」を選ぶとウィンドウが出てくるので、そのなかのRuby on RailsカテゴリからHTML(Rails)を選択してファイルタイプを追加してやる。
以上。
まあ、思ったほどめんどくはなかった。