1

我想使用 capistrano gem 在远程测试服务器上部署我的应用程序。git 和 rails 都应该在同一台服务器上运行。

我有 2 个用户 'git' 用于 git 存储库和安装了 rvm 的 'rails'。在git push之后,我想执行hook post-receive,它运行su rails然后cap deploy。当我尝试推送时,我收到消息:

remote: su: must be run from a terminal

我该如何解决此消息。我可以通过 git ssh 连接以某种方式启用 tty 吗?

对于这种情况,我可以放弃 capistrano,但我仍然希望 rvm 和 rails 仅由用户 rails 使用(因此su可能必须在每种情况下使用)。


编辑现在我绕过问题。可能这是非常糟糕的解决方案,但有效;)。从下面的脚本中,我删除了原始路径和回声。

绕行前的接收后挂钩

#!/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
4

0 回答 0