我正在尝试设置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传递了正确的环境信息。但是,如果我在我的Captistrano部署中使用'rvmsudo',它会等待我的sudo密码。
我想实现一个与try_sudo完全相同的try_rvmsudo,如果要求,它会发送密码。但我似乎无法找到有关这方面的任何信息。
这是我尝试使用的restart命令:
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:
答案 0 :(得分:3)
好吧,我发现我可以让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
欢迎任何其他解决方案!
答案 1 :(得分:0)
rvmsudo挂capistrano的问题似乎已在更新版本的rvm中得到修复。因为我在目标机器上运行'rvm get stable'解决了这个问题。