首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Capistrano中使用rvmsudo

在Capistrano中使用rvmsudo
EN

Stack Overflow用户
提问于 2011-06-09 05:09:16
回答 2查看 2.3K关注 0票数 4

我正在尝试设置capistrano来轻松部署我的rails3应用程序。我是rails的新手。

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

我在同一台服务器上运行redmine,所以我跟随http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/来运行多个版本的ruby/rails。在我尝试让capistrano重启passenger服务器之前,它工作得很好。

问题是“sudo”不能传递环境设置(如sudo changes PATH - why?所示)

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

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

下面是我尝试使用的重新启动命令:

代码语言:javascript
复制
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

上面挂着一句话:

代码语言:javascript
复制
 ** [out :: snapshotroulette.com] [sudo] password for deployer:
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-10 04:54:13

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

它不是很漂亮,但它是有效的:

代码语言:javascript
复制
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

欢迎任何其他解决方案!

票数 3
EN

Stack Overflow用户

发布于 2012-08-29 22:08:32

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6285306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档