: O. Yuanying

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)を選択してファイルタイプを追加してやる。

bundle-editor.jpg

以上。

まあ、思ったほどめんどくはなかった。