情况是我的计算机上的默认gemset指向rails 5.0.0
。但是:我有一个使用非常古老的rails版本的应用程序。让我们说这个例子应用程序使用:rails 2.1.1
。
由于rails 2.1.1
中指定了cd'ed
,我的计算机会在rails 2.1.1
Gemfile
时自动切换到rails 5.0.0
吗?或者:我是否需要 明确地 创建一个gemset,以便我的应用程序和我的机器能够以“rails 2.1.1方式”执行操作(而不是执行操作“rails 5.0.0方式,这是我的默认gemset中的rails版本?”
我担心的是,如果我的机器在app内部开发时认为我正在使用rails 2.1.1
而不是rails 2.1.1
:那么诸如生成器之类的rails命令可能会创建文件并执行“rails 5.0”。 0方式“而不是”rails 2.1.1“方式。
希望这是有道理的。以下是我要通过Gemset“明确”说明此应用使用rails 2.1.1
示例:
我创建了一个gemset,可以为使用rvm gemset create rails_2_1_1
rvm use 2.2.1@rails_2_1_1
我指定要在此gemset上使用的ruby版本
gem install rails --version=2.1.1
然后我将旧版本的rails安装到这个gemset上:
rails 2.1.1
现在这个gemset使用.ruby-gemset
。
现在,在我的应用程序的根目录中,我指定了一个rails 2.1.1
文件,告诉我们:“确保以rails 5.0.0
方式而不是#.ruby-gemset
rails_2_1_1
方式执行操作:
SELECT SQL_CALC_FOUND_ROWS t.*,
Count(DISTINCT l.lead_id) AS leads,
Count(DISTINCT v.user_id) AS views
FROM trading t
LEFT JOIN leads l ON t.trade_id = l.trade_id
LEFT JOIN post_view v ON t.trade_id = v.trade_id AND v.user_id != %s
WHERE t.user_id = %s AND t.published = %s
GROUP BY t.trade_id
ORDER BY timestamp DESC
LIMIT $start, $perpage
我想确定如果应用程序的Gemfile中指定了另一个rails版本而不是我的默认gemset:那么在该应用程序内开发将在Gemfile中指定的rails版本的上下文中执行所有操作,而不是rails默认gemset中的版本。
答案 0 :(得分:2)
这不是RVM和Rails的问题。使用Gemfile是最好的方法,恕我直言!在你的Gemfile中,你可以指定使用哪个ruby和哪个gemset。
首先,让我们为 {
"chat" : {
"armobiliya@gmail-com-doggieshome007@gmail-com" : {
"-KN8QNQeARA3T5esXvn2" : {
"message" : "hi doggy how are you?",
"recipient" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2",
"sender" : "JY6HQlltFCUqps3YDzGYLat7YLC3"
},
"-KN8QSDUfGJwaao33nkd" : {
"message" : "I am fine ...n you?",
"recipient" : "JY6HQlltFCUqps3YDzGYLat7YLC3",
"sender" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2"
},
"-KN8QV1tuY5imq11EyhY" : {
"message" : "me too",
"recipient" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2",
"sender" : "JY6HQlltFCUqps3YDzGYLat7YLC3"
},
"-KN8QaYfdXmKuceLqdkP" : {
"message" : "missing you\uD83D\uDE25",
"recipient" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2",
"sender" : "JY6HQlltFCUqps3YDzGYLat7YLC3"
},
"-KN8Qd1PK_iFfKD6w8gL" : {
"message" : "ohhhhh\uD83D\uDE0A",
"recipient" : "JY6HQlltFCUqps3YDzGYLat7YLC3",
"sender" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2"
},
"-KN8Ql8-ONrsL3TdWfFO" : {
"message" : "\uD83C\uDF82\uD83C\uDF82\uD83C\uDF82\uD83C\uDF82\uD83C\uDF82\uD83C\uDF82happy birthday",
"recipient" : "JY6HQlltFCUqps3YDzGYLat7YLC3",
"sender" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2"
},
"-KN8QwIt0x08O-_Y4Sc5" : {
"message" : "Thank you dear\uD83D\uDE18",
"recipient" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2",
"sender" : "JY6HQlltFCUqps3YDzGYLat7YLC3"
},
"-KN8R5jX9ZKiFBpGhFd2" : {
"message" : "\uD83D\uDE03",
"recipient" : "utb0d5LBQ0VOs8R0V3qJmNxeT9t2",
"sender" : "JY6HQlltFCUqps3YDzGYLat7YLC3"
}
}
},
"users" : {
"JY6HQlltFCUqps3YDzGYLat7YLC3" : {
"avatarId" : 1,
"connection" : "offline",
"createdAt" : "1469036893226",
"firstName" : "Doggies Home",
"userEmail" : "doggieshome007@gmail.com"
},
"utb0d5LBQ0VOs8R0V3qJmNxeT9t2" : {
"avatarId" : 1,
"connection" : "offline",
"createdAt" : "1469036965579",
"firstName" : "Mobiliya AR",
"userEmail" : "armobiliya@gmail.com"
}
}
}
上的系统确定默认 ruby。这将允许任何新的/现有的Rails项目默认为这个ruby版本(除了那些用Gemfile覆盖的项目):
5.0.0
..当然,如果你想将它固定到指定的gemset:
rvm use --default 5.0.0
如果您想设置rails应用程序以使用RVM gemset rvm use --default 5.0.0@my_default_gemset
,类似于下面的RVM命令......
2.2.1@rails_2_1_1
在你的Gemfile中,在rvm use 2.2.1@rails_2_1_1
行的正下方指定以下两行注释:
source
现在,当您source 'https://rubygems.org'
#ruby=2.2.1
#ruby-gemset=rails_2_1_1
进入rails'app目录时,您应该会收到以下消息,或者类似于:
cd
您可以仔细检查结果:
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 ]
的另一个示例,示例RVM命令...
ruby-2.0.0-p247@rails-4.0.0
在Gemfile中,指定:
rvm use ruby-2.0.0-p247@rails-4.0.0
答案 1 :(得分:1)
您还可以将rvmrc文件创建到项目目录中,然后它将自动切换rvm
请按照流程创建rvmrc文件。
转到项目目录
rvm use 2.2.1@rails_2_1_1
rvm --rvmrc --create 2.2.1@rails_2_1_1
我认为这会对你有所帮助。
答案 2 :(得分:0)
您可以在项目的文件夹中创建.ruby-version
文件,RVM将自动切换到正确的Ruby。像这样:
$ echo '2.1.1' > .ruby-version
您只需要确保安装了该版本,例如:
$ rvm install ruby-2.1.1
答案 3 :(得分:0)
首先,我建议不要使用.ruby-gemset
文件,因为Gemfile
已经拥有了您需要的所有内容。 .ruby-version
也已过时,因为Ruby版本也可以在Gemfile
内指定:
source 'https://rubygems.org'
ruby '2.3.1'
gem 'rails', '~> 4.2.7'
...
现在关于Rails版本。只要您使用bundle exec
运行命令,这些命令就会被执行。版本将完全按照Gemfile
中的说明。
项目binstubs
文件夹中还有bin/
个脚本。它们是运行命令的最佳方式,因为它们通常会针对项目需求进行调整(例如,与命令一起运行spring
),并且最终它们最终会运行bundle exec
。 / p>
所以正确的做法是运行./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
。你只需安装一次而忘记它。