簡體   English   中英

RVM切換Rails版本

[英]RVM switching Rails Versions

情況是我的計算機上的默認gemset指向rails 5.0.0 但是:我有一個使用非常古老的rails版本的應用程序。 讓我們說這個例子的應用程序使用: rails 2.1.1

難道我的機器自動切換到rails 2.1.1cd'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。

設置默認的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

在Gemfile上設置默認的Ruby / Gemset - 用於Rails特定的應用程序

例1

如果您想設置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 ]

例2

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM