Rails3 和 Rails2 的 rails 指令如何都能運作?

裝了 Rails3 beta 之後啊,那個 rails 新建專案的指令就變成產生 Rails3 了,那要怎麼產生本來的 Rails2 版本呢? 今天 Ruby Tuesday 聚會有人問了我這個問題。

整理 Rails3 資料的時候就有看到解法,回答如下:

首先,如果還沒裝 Rails3,請先將本來 Rails2 版本的 rails 指令複製一份成 rails2 (可以打 which rails 可以找到位置,這個檔案跟 gems/rails-2.3.5/bin/rails 不一樣哩),然後將裡面的 version = “>= 0” 改成 version = “~> 2.0” 即可。之後執行 rails2 project_name 就可以產生 Rails2 版本的專案了。這個 rails2 的檔案長得如下(第一行的 ruby 位置你的可能跟我不一樣):


#!/usr/local/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'rails' is installed as part of a gem, and
# this file is here to facilitate running it.
#
 
require 'rubygems'
 
version = "~> 2.0"
 
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end
 
gem 'rails', version
load Gem.bin_path('rails', 'rails', version)

如果你已經安裝了 Rails3,那 Rails3 的這個檔案跟 Rails2 的差異只在最後兩行而已。

參與討論

4 則留言

  1. 那個連結,這應該是 rails 3.0.0.pre 的解法(沒玩 pre 不清楚),

    對於要 rails 2.x 與 3.0.0.beta 共存,應該這樣改比較好:

    if version < "3"
    gem 'rails', version
    load 'rails'
    else
    gem 'railties', version
    load Gem.bin_path('railties', 'rails', version)
    end

    參考:http://d.hatena.ne.jp/willnet/20100206/1265476141

  2. 看太快,你原本提供的 binay file code 是 rails 2 的,我看成是 rails 3 的,那基本上作法都一樣,只是分成兩個檔案或一個檔案罷了。

  3. 遇到了非常麻煩的問題,我一台機器上有Rails2.3.5(需要rack1.0.x)/Sinatra0.94, 想安裝Rails3 beta
    (需要rack 1.1.0), WEB server是apache2.2+passenger 2.9(原本是2.5); 不知為何passenger升級到2.9後, 原本sinatra的網站, 可以用gem ‘passenger’, ‘~>1.0.0’的指令就變的不可用了;會一直噴出rack版本錯誤;不知有沒有這方面的經驗可供參考?

  4. 假設你的電腦裡有2.3.14和3.1.1,那輸入rails new xxx,會產生一個3.1.1的rails project,而輸入rails _2.3.14_ xxx,則會產生一個2.3.14的rails project,此方法不用改程式

發佈留言

發表迴響