0

据我了解,Capistrano 所做的只是 ssh 进入服务器并执行我们希望它执行的命令(大部分)。

我在过去的几个项目中使用了 rvm,并且必须安装 rvm-capistrano gem。否则,即使我们在存储库中有一个正确的 .rvmrc 文件(具有正确的 ruby​​ 和正确的 gemset),它也无法找到可执行文件(或者我记得)。

同样,今天我正在为我正在使用 pythonbrew 的项目设置部署,并且一个简单的“cd #{deploy_to}/current && pythonbrew venv use myenv && gunicorn_django -c gunicorn.py”给了我一条错误消息,说“找不到可执行的 gunicorn_django”。我想这是因为 virtualenv 没有正确激活。但是我们在做“pythonbrew venv use myenv”的时候不是激活了环境吗?如果我 ssh 进入服务器并在 shell 上执行它,完整的命令可以正常工作,但是当我通过 Capistrano 执行它时它不会。

我的问题是 - 为什么 Capistrano 需要修改才能与 rvm 和 pythonbrew 等程序一起使用,即使它所做的只是通过 ssh 执行几个命令?

4

1 回答 1

1

那是因为他们的 ssh'ing 不会激活你的 shell 环境。所以它没有选择启用魔法的源语句。只需在运行命令之前执行 rvm use ... 而不是假设 cd 会自动拾取它。那应该没问题。如果您一直在使用结构,则可以使用 env() 上下文管理器来确保在每个命令之前运行。

于 2013-01-27T17:06:47.230 回答