RVM对Capistrano的指示感到困惑

时间:2011-08-06 16:12:59

标签: ruby-on-rails ruby-on-rails-3 deployment capistrano

努力让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还是其他地方?

2 个答案:

答案 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