我是卡皮斯特拉诺的新手,这几天一直在思考这个问题,所以非常感谢你的帮助。
我们有一个烦人的安全设置,这意味着我不能作为ssh用户在远程服务器上运行capistrano任务。这是一个简单的This problem版本,似乎没有一个有效的答案。
编辑:
深入研究后,我发现我可以做如下事情:
run "su - newuser" do |channel, stream, data|
channel.send_data("#{password}\n")
channel.send_data("rm -rf #{release_path}\n")
end }
我可以使用这个来覆盖默认的部署方法,并完成我需要做的大部分工作。我可以在服务器上创建所需的目录等等,并使用ssh转发从git中提取ssh用户。这就产生了我的下一个问题。我现在有了newuser拥有的目录,其中包含ssh_user拥有的文件和目录。我确实有作为newuser的sudo权限,但无法计算如何chmod这些文件。我试过这样的东西:
run "su - newuser" do |channel, stream, data
channel.send_data("#{password}\n")
channel.send_data("sudo chmod 775 #{cache_path}\n")
end }
但是所有的东西都挂起了,似乎块是在无限循环中执行的。很明显,这里有很多我不明白的地方,我会非常感谢你的一些建议,即使只是一个很好的相关阅读。
最佳答案
https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Invocation-Run
显示用于运行的:shell选项,可以将其设置为:
run "your cmd", :shell => "su - other_user -s bash"
如果使用预定义任务,则最好重新定义run和su以合并shell选项。
这假设ssh用户可以在没有密码的情况下进行su。如果不使用块发送密码:
run "your cmd", :shell => "su - other_user -s bash" do |channel, stream, data|
channel.send_data("#{other_user_password}\n")
end
关于ruby-on-rails - 以其他用户身份运行capistrano任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14817018/