据我所知,Capistrano所做的就是ssh进入服务器并执行我们想要的命令(主要是)。
我在过去几个项目中使用过rvm,并且必须安装rvm-capistrano gem。否则,它无法找到可执行文件(或者我记得),即使我们在存储库中有一个正确的.rvmrc文件(带有正确的ruby和正确的gemset)。
同样,今天我正在为我正在使用pythonbrew的项目设置部署,而一个简单的“cd#{deploy_to} / current&& pythonbrew venv使用myenv&& gunicorn_django -c gunicorn。 py“给了我一条错误消息,说”找不到可执行文件gunicorn_django“。我想这是因为virtualenv没有正确激活。但是当我们做“pythonbrew venv使用myenv”时,我们没有激活环境吗?如果我ssh到服务器并在shell上执行它,完整的命令工作正常,但是当我通过Capistrano执行时它不会。
我的问题是 - 为什么Capistrano需要修改以及像rvm和pythonbrew这样的程序,尽管它所做的只是在ssh上执行几个命令?
答案 0 :(得分:1)
那是因为他们的ssh'ing并没有激活你的shell的环境。所以它没有拿起启用魔术的源语句。只是做一个rvm使用...在运行命令之前,而不是假设cd会自动选择它。应该没事的。如果您一直在使用fabric,那么可以使用env()上下文管理器来确保在每个命令之前运行。