Ruby on rails 3 git推送后部署rails应用程序
我想使用capistrano gem在远程测试服务器上部署我的应用程序。 git和rails都应该在同一台服务器上运行 我有两个用户“git”用于git存储库,还有安装了rvm的“rails”。在git推送之后,我想执行hook-post-receive,它运行su-rails,然后cap-deploy。 当我尝试推送时,我得到一个信息:Ruby on rails 3 git推送后部署rails应用程序,ruby-on-rails-3,git,ssh,capistrano,su,Ruby On Rails 3,Git,Ssh,Capistrano,Su,我想使用capistrano gem在远程测试服务器上部署我的应用程序。 git和rails都应该在同一台服务器上运行 我有两个用户“git”用于git存储库,还有安装了rvm的“rails”。在git推送之后,我想执行hook-post-receive,它运行su-rails,然后cap-deploy。 当我尝试推送时,我得到一个信息: remote: su: must be run from a terminal 我如何处理此消息。我可以通过git ssh连接以某种方式启用tty吗 对于这
remote: su: must be run from a terminal
我如何处理此消息。我可以通过git ssh连接以某种方式启用tty吗
对于这种情况,我可以放弃capistrano,但我仍然希望rvm和rails仅由用户rails使用(因此,在每种情况下可能都必须使用su)
编辑 现在我绕开这个问题。可能这是一个非常糟糕的解决方案,但很有效;)。从bellow脚本中,我删除了原始路径和echo 在绕线前,将接钩放在立柱上
#!/bin/bash
while read oldrev newrev ref
do
su rails #here script fails
cd /path/to/rails/app/current/ && cap deploy
done
现在收到邮件
#!/bin/bash
while read oldrev newrev ref
do
ssh rails@localhost '/path/to/scripts/deploy.sh'
done
deploy.sh脚本
#!/bin/bash
CAP_DIR="/path/to/capistrano/dir"
RUBY="1.9.3-p194"
GEMSET="gemset_name"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
rvm use $RUBY
rvm gemset use $GEMSET
cd $CAP_DIR
cap deploy
请给我们看一下你的邮件接收文件。