【问题标题】:Can't Deploy App Using RVM Capistrano无法使用 RVM Capistrano 部署应用程序
【发布时间】:2013-05-05 12:58:53
【问题描述】:

首先,我在 ubuntu 上使用 wayne 的 rvm 1.15.8(稳定版)开发应用程序轨,我将部署到我的 vps。

这是在我的 vps 上构建 rails 应用程序的历史:

  1. 在我的 vps 上使用用户“user”安装 rvm,我从 this 尝试过,这里是 rvm info

    [user@myhost ~]$ rvm info
    
    ruby-1.9.3-p392:
    
      system:
        uname:       "Linux mydomain.com 2.6.32-358.6.1.el6.i686 #1 SMP Tue Apr 2
    3 18:13:20 UTC 2013 i686 i686 i386 GNU/Linux"
        system:      "centos/6.4/i386"
        bash:        "/bin/bash => GNU bash, version 4.1.2(1)-release (i386-redhat-l
    inux-gnu)"
        zsh:         " => not installed"
    
      rvm:
        version:      "rvm 1.19.6 (stable) by Wayne E. Seguin <wayneeseguin@gmail.co
    m>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]"
        updated:      "16 hours 9 minutes 44 seconds ago"
    
      ruby:
        interpreter:  "ruby"
        version:      "1.9.3p392"
        date:         "2013-02-22"
        platform:     "i686-linux"
        patchlevel:   "2013-02-22 revision 39386"
        full_version: "ruby 1.9.3p392 (2013-02-22 revision 39386) [i686-linux]"
    
      homes:
        gem:          "/usr/local/rvm/gems/ruby-1.9.3-p392"
        ruby:         "/usr/local/rvm/rubies/ruby-1.9.3-p392"
    
      binaries:
        ruby:         "/usr/local/rvm/rubies/ruby-1.9.3-p392/bin/ruby"
        irb:          "/usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb"
        gem:          "/usr/local/rvm/rubies/ruby-1.9.3-p392/bin/gem"
        rake:         "/usr/local/rvm/gems/ruby-1.9.3-p392/bin/rake"
    
      environment:
        PATH:         "/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/r
    uby-1.9.3-p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/r
    vm/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/bin"
        GEM_HOME:     "/usr/local/rvm/gems/ruby-1.9.3-p392"
        GEM_PATH:     "/usr/local/rvm/gems/ruby-1.9.3-p392:/usr/local/rvm/gems/ruby-
    1.9.3-p392@global"
        MY_RUBY_HOME: "/usr/local/rvm/rubies/ruby-1.9.3-p392"
        IRBRC:        "/usr/local/rvm/rubies/ruby-1.9.3-p392/.irbrc"
        RUBYOPT:      ""
        gemset:       ""
    
  2. 我正在为我的 vps 使用 kloxo 控制面板,其根目录位于 /home/admin/myapp/public

  3. 我会部署,这里是deploy.rb

require "bundler/capistrano"
require "rvm/capistrano"

server "xxx.xxx.xxx.xxx", :web, :app, :db, primary: true

set :bundle_cmd, "/usr/local/rvm/gems/ruby-1.9.3-p392@global"
set :bundle_dir, "/usr/local/rvm/gems/ruby-1.9.3-p392"
set :rvm_ruby_string, EVN['GEM_HOME'].gsub(/.*\?/,"")
set :rvm_type, :user

set :default_environment, { 
    'PATH' => "/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/r
uby-1.9.3-p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/r
vm/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/bin",
    'RUBY_VERSION' => 'ruby 1.9.3',
    'GEM_HOME' => "/usr/local/rvm/gems/ruby-1.9.3-p392",
    'GEM_PATH' => "/usr/local/rvm/gems/ruby-1.9.3-p392:/usr/local/rvm/gems/ruby-
1.9.3-p392@global",
    'BUNDLE_PATH' => "/usr/local/rvm/gems/ruby-1.9.3-p392"
}

set :application, "myapp"
set :user, "user"
set :deploy_to, "/home/admin/#{application}"
set :deploy_via, :remote_cache
set :use_sudo, false

set :scm, "git"
set :repository, "git@github.com:myuser/#{application}.git"
set :branch, "master"

default_run_options[:pty] = true
ssh_options[:forward_agent] = true
after "deploy", "deploy:cleanup" # keep only the

我尝试运行cap deploy:setup,但出现错误

executing "mkdir -p /home/admin/myapp /home/admin/myapp/release /home/admin/myapp/shared /home/admin/myapp/shared/system /home/admin/myapp/shared/log /home/admin/myapp/shared/pids"
   servers: ["xxx.xxx.xxx.xx"]
Password:
   [xxx.xxx.xxx.xxx] executing command
** [out :: xxx.xxx.xxx.xxx] env : /home/user/.rvm/bin/rvm-shell: No such file or directory
failed : "env PATH: .........etc"

您能帮我更正我的步骤和代码吗?

【问题讨论】:

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


    【解决方案1】:

    尝试将 rvm-capistrano 的要求移至文件末尾。我最近也这样做了。

    当您使用 rvm 时,您不需要设置 bundle cmd、bundle_dir 或 default_environment(除非您这样做是为了其他目的?

    您似乎也在尝试检测您在本地使用的 ruby​​ 版本,以便在部署中使用,只需 set :rvm_ruby_string, :local 即可

    【讨论】:

    • rvm capistrano 将读取 rvm_path $HOME/.rvm 的位置,而我的 rvm 路径 /usr/local/rvm/ 的位置,所以我应该将默认 rvm_path 设置为 /usr/local/rvm/ 。现在,我的问题是找不到 rmv-shell 的目录。
    • 由于您使用的是系统范围的 ruby​​,您需要将 rvm_type 设置为 :system
    • 谢谢@cpuguy83 .. 我应该重新安装 rvm,因为我使用 sudo 来安装 rvm,see..
    【解决方案2】:

    对我来说,

    set :rvm_ruby_string, :local #doesn't work
    

    没用。我不得不使用显式版本:

    set :rvm_ruby_string, "2.1.2" #works
    
    • capistrano (2.15.5)
    • rvm-capistrano (1.5.2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      相关资源
      最近更新 更多