【问题标题】:What does this Capistrano error output mean?这个 Capistrano 错误输出是什么意思?
【发布时间】:2013-09-02 21:45:13
【问题描述】:

我正在尝试配置 Capistrano 以将 Rails 3.2.14 应用程序从我的 OS X 系统部署到 CentOS 6 VPS。

我在两台机器上都有名为“ruby-1.9.3@rails_3_personal”的 RVM gemset。

我安装了 capistrano 和 rvm/capistrano gem。

我确保登录用户在目标服务器上具有所需的目录权限。

当我跑步时...

cap deploy:setup -d

我得到这个输出...

        triggering load callbacks
      * 2013-09-02 14:06:45 executing `deploy:setup'
      * executing "mkdir -p /opt/deployed_rails_apps/my_app /opt/deployed_rails_apps/my_app/releases /opt/deployed_rails_apps/my_app/shared /opt/deployed_rails_apps/my_app/shared/system /opt/deployed_rails_apps/my_app/shared/log /opt/deployed_rails_apps/my_app/shared/pids"
    Preparing to execute command: "mkdir -p /opt/deployed_rails_apps/my_app /opt/deployed_rails_apps/my_app/releases /opt/deployed_rails_apps/my_app/shared /opt/deployed_rails_apps/my_app/shared/system /opt/deployed_rails_apps/my_app/shared/log /opt/deployed_rails_apps/my_app/shared/pids"
    Execute ([Yes], No, Abort) ?  |y|  y
        servers: ["my_domain.com"]
        [user_name@my_domain.com] executing command
     ** [out :: user_name@my_domain.com] /home/user_name/.rvm//scripts/selector: line 709: /db: No such file or directory
     ** [out :: user_name@my_domain.com] /home/user_name/.rvm//scripts/functions/db: line 18: /db: No such file or directory
    ** [out :: user_name@my_domain.com] /home/user_name/.rvm//scripts/functions/gemset: line 21: /db: No such file or directory
     ** [out :: user_name@my_domain.com] mkdir: cannot create directory `/ruby-1.9.3-p448': Permission denied
     ** [out :: user_name@my_domain.com] 
     ** [out :: user_name@my_domain.com] Error: RVM was unable to use 'ruby-1.9.3-p448@rails_3_personal'
        command finished in 388ms
    failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.3-p448@rails_3_personal' -c 'mkdir -p /opt/deployed_rails_apps/my_app /opt/deployed_rails_apps/my_app/releases /opt/deployed_rails_apps/my_app/shared /opt/deployed_rails_apps/my_app/shared/system /opt/deployed_rails_apps/my_app/shared/log /opt/deployed_rails_apps/my_app/shared/pids'" on user_name@my_domain.com
  • 为什么 Capistrano 试图创建 /ruby-1.9.3-p448

  • 这个错误是什么意思? (另外两个喜欢它?)该路径甚至不是有效路径(“//”)。

         ** [out :: user_name@my_domain.com] /home/user_name/.rvm//scripts/selector: line 709: /db: No such file
    
  • 还有……“Error: RVM was unable to use 'ruby-1.9.3-p448@rails_3_personal'

    好的,“无法使用。”为什么呢?我该如何解决?

这是我的deploy.rb...

require "bundler/capistrano"

require "rvm/capistrano"

set :rvm_ruby_string, 'ruby-1.9.3-p448@rails_3_personal'

set :rvm_type, :user

set :application, 'my_app'

set :repository, 'git@github.com:GithubUser/my_app.git'

set :deploy_to, "/opt/deployed_rails_apps/#{application}"

set :use_sudo, false

set :scm, "git"
set :branch, "master"

set :user, 'user_name'

set :deploy_via, :remote_cache

# Keep only 5 releases --------------------------------
set :keep_releases, 5
after "deploy:update", "deploy:cleanup"
# -----------------------------------------------------

load 'deploy/assets'

role :app, 'user_name@my_domain.com'
role :web, 'user_name@my_domain.com'

namespace :deploy do

  task :start, :roles => :app do
    run "touch #{current_release}/tmp/restart.txt"
  end

  task :stop, :roles => :app do
    # Do nothing.
  end

  desc "Restart Application"
  task :restart, :roles => :app do
    run "touch #{current_release}/tmp/restart.txt"
  end

end

【问题讨论】:

  • capistrano 无法切换到正确的 ruby​​ 版本(当然你知道这一点)。您的 RVM 是系统范围的安装?如果没有,您可能需要在 capistrano 中设置正确的用户,使用 set :user, "youruser"
  • 是的,我看到了“错误:RVM 无法使用 'ruby-1.9.3-p448@rails_3_personal'”的部分。所以,同意 - 这是这里发生的一个问题。我只是不知道该怎么办。我该如何解决?我登录到目标机器并确认rvm use ruby-1.9.3-p448@rails_3_personal 按预期工作。感谢您的建议。我确实在我的deploy.rb 中添加了set :user, 'user_name',但我仍然遇到同样的错误。
  • 这看起来像是 RVM 中的一个错误,您应该在此处打开票证:github.com/wayneeseguin/rvm/issues
  • 近距离投票怎么了?
  • @mpapis Done.

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


【解决方案1】:

我相信问题实际上出在这个脚本上:

 ** [out :: user_name@my_domain.com] /home/user_name/.rvm//scripts/selector: line 709: /db: No such file or directory

您的require "rvm/capistrano" 中似乎调用了女巫。您可以尝试评论并手动设置路径:

set :default_environment, {
    'PATH' => PATH,
    'GEM_HOME'     => GEM_HOME,
    'GEM_PATH'     => GEM_PATH,
}

要查看您的值,您可以在切换到 gemset 后查看rvm info

【讨论】:

  • 好的,谢谢。我注释掉了require "rvm/capistrano" 并按照您的建议明确设置了:default_environment,现在cap deploy:setup 完成且没有错误。我就这样修好了。非常感谢你。不过,我仍然不明白问题出在哪里。
  • @Ethan 很高兴它成功了,不幸的是我也不知道真正的问题。然而,这种解决方法应该可以。
【解决方案2】:

这是一个错误,已通过 https://github.com/wayneeseguin/rvm/issues/2186 修复

需要在服务器上更新到最新版本的rvm:

rvm get head

【讨论】:

  • 我按照您的建议更新到最新版本。我仍然遇到与原始问题中描述的相同的错误。
  • 您需要更新服务器上的 rvm 而不是本地,请显示新的输出 - 它永远不会相同
  • 嗨@mpapis。谢谢您的帮助。我都更新了。我现在遇到了一个不同的错误,就像 rvm-capistrano Github 问题跟踪器上的 noted 一样——github.com/wayneeseguin/rvm/issues/2186。这可能是 Capistrano 错误。
猜你喜欢
  • 1970-01-01
  • 2020-11-09
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多