为什么Upstart无法运行“source bin/activate”?

31

由于某种原因,upstart无法激活我的virtualenv。

这是我运行它的方式。

script
    # My startup script, plain old shell scripting here.
    cd path/to/env
    source bin/activate
    ....
end script

当手动启动时,虚拟环境运行良好。

为什么这样不起作用?


1
可能 upstart 不会在连续的命令之间保留环境变量?您可以始终使用 $VIRTUAL_ENV/bin/python ... 直接运行应用程序而无需激活环境。 - millimoose
@millimoose,$VIRTUAL_ENV是虚拟环境的路径吗? - Calum
确切地说,“activate”应该设置相同的变量,因此我使用它,认为名称会很熟悉。 - millimoose
似乎那也不起作用。 - Calum
你有收到任何错误消息吗? - millimoose
显示剩余2条评论
2个回答

53

所以我已经解决了,由于某种原因upstart不喜欢使用“source”,所以我将这行改为:

source bin/activate

. bin/activate

那样做是有效的,但不知道为什么。如果有人能解释一下就很感兴趣。


超出我的理解范围,我已在Ubuntu 12.04上确认过了。谢谢。 - dbro
这让我疯了。如果可以的话,我会给你五个赞。谢谢! - aendra
2
这个方法的原因在于我对这个问题的另一个回答中。 - Jeffrey Martinez
3
我尝试了两种方法,但都没用。(Ubuntu 14.04.1服务器。)(而且,我没有试图使用 "bin/activate",只是试图使用用户的 .bashrc 文件来获取环境变量,甚至使用了完整路径...) - odigity
我在使用gunicorn和upstart时遇到了问题。后来我发现,我只需要将gunicorn可执行文件的路径更改为环境中bin/文件夹中的路径即可解决问题。 - Max Candocia

43

source 是一个 Bash 内置命令,但只是 POSIX “特殊”命令。

在执行脚本部分时,Upstart 运行 sh -e

sh shell 不理解 source 命令,只理解 . 命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接