Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 为什么Capistrano需要修改才能使用像pythonbrew这样的东西?_Deployment_Ssh_Capistrano_Fabric - Fatal编程技术网

Deployment 为什么Capistrano需要修改才能使用像pythonbrew这样的东西?

Deployment 为什么Capistrano需要修改才能使用像pythonbrew这样的东西?,deployment,ssh,capistrano,fabric,Deployment,Ssh,Capistrano,Fabric,据我所知,Capistrano所做的只是将ssh连接到服务器并执行我们希望它执行的命令(大部分) 我在过去的几个项目中使用过rvm,并且必须安装rvm capistrano gem。否则,它无法找到可执行文件(或者我记得是这样),即使我们在存储库中有一个正确的.rvmrc文件(使用正确的ruby和正确的gemset) 类似地,今天我正在为一个使用pythonbrew的项目设置部署,一个简单的“cd#{deploy_to}/current&&pythonbrew venv use myenv&&g

据我所知,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使用myenv”时,我们不是激活了环境吗?如果我使用ssh连接到服务器并在shell上执行complete命令,则该命令可以正常工作,但如果我通过Capistrano执行,则不能正常工作


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

这是因为它们的ssh'ing不会激活您的shell环境。因此,它并没有拾取启用该魔法的源语句。只要做一个rvm使用。。。在运行命令之前,而不是假设cd将自动拾取该命令。那就好了。如果您一直在使用fabric,那么可以使用env()上下文管理器来确保它在每个命令之前运行。

但这就是为什么我在执行cd之后放上“pythonbrew venv use myenv”语句(类似于rvm use),但它仍然不起作用。Pastebin?除非它在同一个命令中,否则我猜这不是保存状态的东西。