我正在尝试设置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_rvmsudo,其功能与try_sudo完全一样,如果需要,它将在其中发送密码。但我似乎找不到有关此操作的任何信息。
这是我尝试使用的重新启动命令:
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:
最佳答案
好吧,我发现我可以让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
任何其他解决方案都欢迎!