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