Ruby on rails 3 git推送后部署rails应用程序

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吗 对于这

我想使用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吗

对于这种情况,我可以放弃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

请给我们看一下你的邮件接收文件。