【问题标题】:Capistrano deploy fails with rake run (rails3 + rvm)Capistrano 部署因 rake 运行而失败(rails3 + rvm)
【发布时间】:2012-06-30 16:40:05
【问题描述】:

编辑: 这里的问题是我在本地机器上使用了 RVM,在服务器上使用了 rbenv。强烈不建议这样做,如果您正在管理多个 ruby​​ 安装(或升级您的 ruby​​ 版本但不想更改系统),请在所有环境中使用 RVM 或 rbenv! /编辑

所以我将从一点历史开始: 我正在将我们的 rails2 网站升级到 rails3。除了 Capistrano 的部署脚本之外,大多数事情现在都可以正常工作。 我目前的设置是:

  • 本地安装 RVM (1.14.1)
  • ruby-1.9.3-p194(设置为项目文件夹)
  • 作为 RVM gem 安装的 Capistrano v2.12.0(从 2.6.0 升级,但在 2.6.0 上也不起作用)
  • rvm-capistrano (1.2.2),添加到 Gemfile(在网上和 SO 上进行了一些阅读之后)
  • rbenv(全球使用 ruby​​ 1.9.3p194)安装在服务器上

(到现在为止,如果您发现任何不合理的地方,请告诉我)

部署脚本中没有任何变化,但是当我尝试部署到我的测试服务器时(我们称之为 beta)我收到了这个错误:

* executing `deploy:restart'
* executing "cd /home/foo/bar/current && rake RAILS_ENV=beta queue:restart_workers"
        servers: ["208.0..."]
        [208.0...] executing command
    *** [err :: 208.0...] rake aborted!
    *** [err :: 208.0...] no such file to load -- bundler/setup
    *** [err :: 208.0...] /home/foo/bar/releases/20120630161947/Rakefile:5
    *** [err :: 208.0...] (See full trace by running task with --trace)
     ** [out :: 208.0...] (in /home/foo/bar/releases/20120630161947)
        command finished in 1183ms
    failed: "sh -c 'cd /home/foo/bar/current && rake RAILS_ENV=beta queue:restart_workers'" on 208.0...

deploy.rb 的相关部分如下所示:

  task :restart do
    run "cd /home/foo/bar/current && rake RAILS_ENV=#{CAP_ENV} queue:restart_workers"
    run "cd /home/foo/bar/current && rake RAILS_ENV=#{CAP_ENV} db:migrate"
    run "touch #{deploy_to}/current/tmp/restart.txt"
  end   

不用说,rake RAILS_ENV=beta queue:restart_workers' 在服务器上手动运行时可以完美运行。此外,应用程序被部署(代码是从 git 复制的,只是部署失败的最后一部分)。

最后,在我安装 rvm-capistrano 并添加到 Gemfile 之前,错误并没有改变,所以我什至不确定它是否与 rvm 有关,我只是从网上看的猜测。

谢谢

【问题讨论】:

  • 我认为您不想同时使用 rbenv 和 rvm - 它们都是管理多个 ruby​​ 版本的方式。
  • 我确实有多个 ruby​​ 版本。我正在从 ruby​​ 1.8.7 + rails 2.3.2 升级,我知道不建议更改本机 ruby​​ OS 安装(又名 /usr/bin/ruby)。
  • rvm 和 rbenv 都用于管理 ruby​​ 版本,它们的方式略有不同。同时使用两者似乎是在给我找麻烦。 rvm-capistrano 可能正在设置使用任何 rvm 认为是当前 ruby​​ 的东西,而不是 rbenv 认为的
  • 我不明白的是,它被配置为全球性的,那么为什么对 capistrano 很重要?我想我会尝试在服务器和我的机器上使用相同的设置,看看效果如何..
  • 如果 capistrano 设置为使用 rvm,可以想象 rvm 将 ruby​​ 更改为与 rbenv 配置使用的不同的 ruby​​。

标签: ruby-on-rails ruby rvm capistrano


【解决方案1】:

为了正常工作,rbenv 必须使用它提供的 shim 覆盖所有与 ruby​​ 和 gem 相关的可执行文件。

通常这是通过启动脚本完成的(这就是当您登录到服务器时它可以工作的原因),但 Capistrano 在没有 shell 的情况下登录,因此不会运行这些脚本。

您必须将以下内容添加到您的 deploy.rb 中:

set :default_environment, {
  'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

并且不要在你的服务器上使用任何与 rvm 相关的东西,rbenv 和 rvm 真的不喜欢对方

PS:关于这个话题的更多解释:http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多