我正在尝试设置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,如果需要密码,它会发送密码。但我似乎找不到任何关于这样做的信息。
下面是我尝试使用的重新启动命令:
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:发布于 2011-06-10 04:54:13
嗯,我发现我可以让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欢迎任何其他解决方案!
发布于 2012-08-29 22:08:32
rvmsudo挂起capistrano的问题似乎已经在较新版本的rvm中得到了修复。对于我在目标机器上运行的'rvm get stable‘修复了这个问题。
https://stackoverflow.com/questions/6285306
复制相似问题