[英]RVM switching Rails Versions
情況是我的計算機上的默認gemset指向rails 5.0.0
。 但是:我有一個使用非常古老的rails版本的應用程序。 讓我們說這個例子的應用程序使用: rails 2.1.1
。
難道我的機器自動切換到rails 2.1.1
當cd'ed
進入這個程序,因為rails 2.1.1
在指定Gemfile
? 或者:我是否需要顯式創建一個gemset,以便我的應用程序和我的機器以“rails 2.1.1方式”執行操作(而不是執行“rails 5.0.0方式,這是我的默認情況下的rails版本”寶石)?
我擔心的是,也許如果我的機器認為我在應用程序內部開發時使用rails 5.0.0
而不是rails 2.1.1
:那么諸如生成器之類的rails命令可能會創建文件並執行“rails 5.0.0 way”而不是以“rails 2.1.1”的方式。
希望這是有道理的。 以下是我將通過Gemset“明確”聲明此應用程序使用rails 2.1.1
例:
我創建了一個gemset,可以為任何使用rails 2.1.1
應用程序指定
rvm gemset create rails_2_1_1
我指定要在此gemset上使用的ruby版本
rvm use 2.2.1@rails_2_1_1
然后我將舊版本的rails安裝到這個gemset上:
gem install rails --version=2.1.1
現在這個gemset使用rails 2.1.1
。
現在在我的應用程序的根目錄中,我指定了一個告訴rails的.ruby-gemset
文件:“確保你正在使用rails 2.1.1
方式而不是rails 5.0.0
方式:
#.ruby-gemset
rails_2_1_1
我想確定如果在應用程序的Gemfile中指定了另一個rails版本而不是我的默認gemset:那么在該應用程序內開發將在Gemfile中指定的rails版本的上下文中執行所有操作,而不是在默認寶石。
這不是RVM和Rails的問題。 使用Gemfile是最好的方法,恕我直言! 在Gemfile中,您可以指定要使用哪個ruby和哪個gemset。
首先,讓我們在5.0.0
上為系統建立默認的 ruby。 這將允許任何新的/現有的Rails項目默認為此ruby版本(除了那些用Gemfile覆蓋的項目):
rvm use --default 5.0.0
..當然,如果你想將它固定到指定的gemset:
rvm use --default 5.0.0@my_default_gemset
如果您想設置rails應用程序以使用RVM gemset 2.2.1@rails_2_1_1
,類似於下面的RVM命令...
rvm use 2.2.1@rails_2_1_1
在Gemfile中,在source
行下方指定以下兩行注釋行:
source 'https://rubygems.org'
#ruby=2.2.1
#ruby-gemset=rails_2_1_1
現在,當你cd
到您的Rails的應用程序目錄,您會收到以下消息,或similiar:
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does
that too, you can ignore these warnings with 'rvm rvmrc warning ignore
/my/rails/app/path/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore
allGemfiles'.
你可以仔細檢查你的結果:
rvm list gemsets
ruby-2.2.1 [ x86_64 ]
ruby-2.2.1@global [ x86_64 ]
=> ruby-2.2.1@rails_2_1_1 [ x86_64 ]
ruby-5.0.0 [ x86_64 ]
ruby-5.0.0@global [ x86_64 ]
使用ruby-2.0.0-p247@rails-4.0.0
另一個例子,示例RVM命令...
rvm use ruby-2.0.0-p247@rails-4.0.0
在Gemfile中,指定:
#ruby=2.0.0-p247
#ruby-gemset=rails-4.0.0
您還可以將rvmrc文件創建到項目目錄中,然后它將自動切換rvm
請按照該過程創建rvmrc文件。
轉到項目目錄
rvm use 2.2.1@rails_2_1_1
rvm --rvmrc --create 2.2.1@rails_2_1_1
我認為這會對你有所幫助。
您可以在項目的文件夾中創建.ruby-version
文件,RVM將自動切換到正確的Ruby。 像這樣的東西:
$ echo '2.1.1' > .ruby-version
您只需要確保安裝了該版本,例如:
$ rvm install ruby-2.1.1
首先,我建議不要使用.ruby-gemset
文件,因為Gemfile
已經擁有了你需要的一切。 .ruby-version
也已過時,因為Ruby版本也可以在Gemfile
指定:
source 'https://rubygems.org'
ruby '2.3.1'
gem 'rails', '~> 4.2.7'
...
現在關於Rails版本。 只要您使用bundle exec
運行命令,這些命令的版本將完全按照Gemfile
說明進行Gemfile
。
項目bin/
文件夾中還有binstubs
腳本。 它們是運行命令的最佳方式,因為它們通常會針對項目需求進行調整(例如,隨着命令運行spring
),並且最終它們最終會運行bundle exec
。
所以正確的做法是運行./bin/rails
,這可能很乏味。 這就是我推薦使用助手的原因。 例如, oh-my-zsh項目具有開箱即用的rails
插件。 前幾行(請參閱下面的說明):
function _rails_command () {
if [ -e "bin/rails" ]; then
bin/rails $@
elif [ -e "script/rails" ]; then
ruby script/rails $@
elif [ -e "script/server" ]; then
ruby script/$@
else
command rails $@
fi
}
function _rake_command () {
if [ -e "bin/rake" ]; then
bin/rake $@
elif type bundle &> /dev/null && [ -e "Gemfile" ]; then
bundle exec rake $@
else
command rake $@
fi
}
alias rails='_rails_command'
compdef _rails_command=rails
alias rake='_rake_command'
compdef _rake_command=rake
當您運行rails
,此腳本會檢查bin/rails
存在(默認為Rails 5和4)並運行它。 如果沒有,腳本檢查script/rails
(默認為Rails 3)和script/server
(默認為Rails 2)。 所以基本上你涵蓋了所有版本。 同樣是rake
。
使用此插件,您永遠不必擔心額外的命令。 總是簡單地運行rails
。 你只需安裝一次而忘記它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.