【问题标题】:Using rvmsudo with Capistrano将 rvmsudo 与 Capistrano 一起使用
【发布时间】:2011-06-08 21:09:15
【问题描述】:

我正在尝试设置 capistrano 以轻松部署我的 rails3 应用程序。我对 Rails 很陌生。

除了我正在尝试重新启动独立乘客服务器之外,一切都正常运行。

我在同一台服务器上运行 redmine,所以我跟着 http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/ 运行多个版本的 ruby​​/rails。这工作正常,直到我尝试让 capistrano 重新启动乘客服务器。

问题是 'sudo' 没有通过环境设置(见:sudo changes PATH - why?

如果我可以使用“rvmsudo”而不是“sudo”,一切都会正常工作,因为 rvmsudo 会传递正确的环境信息。但是,如果我在 Captisrano 部署中使用“rvmsudo”,它会挂起等待我的 sudo 密码。

我想实现一个与 try_sudo 完全相同的 try_rvmsudo,如果需要,它会在其中发送密码。但我似乎找不到任何关于这样做的信息。

这是我尝试使用的重启命令:

desc "Restart Passenger server"
task :restart, :roles => :app, :except => { :no_release => true } do
    run <<-CMD
      if [[ -f #{release_path}/tmp/pids/passenger.#{passenger_port}.pid ]];
      then
        cd #{deploy_to}/current && #{passenger_path}passenger stop -p #{passenger_port} --pid-file #{release_path}/tmp/pids/passenger.#{passenger_port}.pid;
      fi
    CMD
    # restart passenger standalone on the specified port/environment and as a daemon
    run "cd #{deploy_to}/current && rvmsudo #{passenger_path}passenger start -e #{rails_env} -p #{passenger_port} -a 127.0.0.1 -d --pid-file #{release_path}\
/tmp/pids/passenger.#{passenger_port}.pid"
  end

它挂着说:

 ** [out :: snapshotroulette.com] [sudo] password for deployer:

【问题讨论】:

    标签: ruby-on-rails-3 capistrano


    【解决方案1】:

    好吧,我发现我可以让 Capistrano 先发送 sudo 密码(通过运行 sudo 命令)。 Sudo 会记住您的密码一小段时间(默认为 5 分钟)。而且,rvmsudo 只是调用设置了一些环境变量的 sudo,所以它也能记住你的密码。

    它不是很漂亮,但它确实有效:

    desc "Restart Passenger server"
    task :restart, :roles => :app, :except => { :no_release => true } do
        # Hack to have capistrano enter the sudo password (for rvmsudo later)
        sudo "whoami"
        run <<-CMD
          if [[ -f #{release_path}/tmp/pids/passenger.#{passenger_port}.pid ]];
          then
            cd #{deploy_to}/current && rvmsudo passenger stop;
          fi
        CMD
    
        # restart passenger standalone on the specified port/environment and as a daemon
        # The sleep 1 is to give the server enough time to spawn. The session was closing before it spawned, so it never actually spawned
        run "cd #{deploy_to}/current && rvmsudo passenger start -e #{rails_env} -p #{passenger_port} -a 127.0.0.1 -d --pid-file #{release_path}/tmp/pids/passeng\
    er.#{passenger_port}.pid && sleep 1"
      end
    

    欢迎任何其他解决方案!

    【讨论】:

      【解决方案2】:

      rvmsudo 挂起 capistrano 的问题似乎已在更新的 rvm 版本中得到修复。对于我在目标机器上运行的“rvm get stable”解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 2012-09-21
        • 2013-04-24
        • 2012-10-09
        • 1970-01-01
        • 2010-11-10
        相关资源
        最近更新 更多