努力让RVM与Capistrano和Rails 3.1rc5一起工作,并对我发现的指令感到困惑。
RVM的网站提供these instructions说:
在新选项中,您可以执行以下操作(根据您的个人设置进行调整):
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano" # Load RVM's capistrano plugin.
set :rvm_ruby_string, 'ree@rails3' # Or whatever env you want it to run in.
现在我假设他们希望将它放在deploy.rb
文件的顶部!?!我只是问,因为我没见过“$:.
”,虽然很少,deploy.rb
是我见过的。
以“$:.
”开头的行完全是什么?它属于deploy.rb
还是其他地方?
答案 0 :(得分:3)
$:
是一个特殊的Ruby变量,相当于$LOAD_PATH
,这是Ruby在使用require
语句时搜索的路径。在其上调用.unshift(...)
会将提供的路径添加到加载路径的前端。
如果你刚刚在没有require 'rvm/capistrano'
语句的情况下调用$:.unshift
,则会出现错误,因为默认情况下,RVM的Capistrano库不在Ruby的加载路径中。你没有在其他deploy.rb
文件中看到这个的原因是因为通常,所需的唯一库是Capistrano,它们已经包含在运行cap deploy
(或任何其他cap
中。 }命令)。
我的deploy.rb
个文件中包含完全相同的代码,效果很好。
答案 1 :(得分:1)
我认为这需要处于最高级别,以便在任何呼叫之前设置 - 即。捆绑之前,任何佣金任务等。这对我来说是个问题。就我而言,我的网络和应用服务器不一样,我不想在网络服务器上使用rvm。
当真正的解决方案相当容易时,它似乎也有点黑魔法。更新代码后,在.rvmrc文件中设置一个受祝福的gemset,不需要做任何其他事情。
after "deploy:update_code", "deploy:rvm:setup"
namespace :deploy do
namespace :rvm do
# Set up .rvmrc
# Note, not using method described in:
# https://rvm.beginrescueend.com/integration/capistrano/
# We want to use RVM only on the app server, so better to set up and bless an .rvmrc file
task :setup, :roles => :app do
run "cd #{latest_release}; rvm use 1.9.2@#{application} --rvmrc --create && rvm rvmrc trust"
end
end
end