Python 故障排除Dreamhost+;乘客+;德扬戈

Python 故障排除Dreamhost+;乘客+;德扬戈,python,django,nginx,passenger,dreamhost,Python,Django,Nginx,Passenger,Dreamhost,我有一个网站在Dreamhost+Passenger+Django上快乐地运行了好几年。最近(上周四),Dreamhost似乎在没有通知我的情况下更新了引擎盖下的乘客,这导致网站宕机 以下是已安装(托管)的乘客目录: $ pwd /dh/nginx/passenger $ ls -la total 32 drwxr-xr-x 12 root root 4096 2014-05-15 13:40 . drwxr-xr-x 6 root root 76 2012-06-27 17:54 ..

我有一个网站在Dreamhost+Passenger+Django上快乐地运行了好几年。最近(上周四),Dreamhost似乎在没有通知我的情况下更新了引擎盖下的乘客,这导致网站宕机

以下是已安装(托管)的乘客目录:

$ pwd
/dh/nginx/passenger
$ ls -la
total 32
drwxr-xr-x 12 root root 4096 2014-05-15 13:40 .
drwxr-xr-x  6 root root   76 2012-06-27 17:54 ..
-rw-r--r--  1 root root 1056 2013-10-26 15:00 LICENSE
drwxr-xr-x  2 root root 4096 2014-05-15 13:40 bin
drwxr-xr-x  7 root root   92 2014-05-15 13:40 buildout
drwxr-xr-x  2 root root 4096 2014-05-15 13:40 dev
drwxr-xr-x  5 root root 4096 2014-05-15 13:40 doc
drwxr-xr-x 10 root root  139 2014-05-15 13:40 ext
drwxr-xr-x  3 root root 4096 2014-05-15 13:40 helper-scripts
drwxr-xr-x  3 root root   69 2014-05-15 13:40 lib
drwxr-xr-x  2 root root  137 2014-05-15 13:40 man
drwxr-xr-x  3 root root   38 2014-05-15 13:40 node_lib
-rw-r--r--  1 root root 1243 2013-10-26 15:00 passenger.gemspec
drwxr-xr-x  4 root root 4096 2014-05-15 13:40 resources
这些文件更新与网站关闭的时间大致相同

我认为这可能是一个通过触摸重新启动乘客的简单案例,但是这似乎不起作用。有没有办法解决这个问题

提前谢谢

编辑1:web服务器是Nginx。我假设我可以重新加载Nginx,这将刷新通过Passenger的所有连接

sudo/etc/init.d/nginx-reload

编辑2:引发错误的文件是:

/dh/nginx/passenger/helper scripts/wsgi loader.py

错误如下:

File "/dh/nginx/passenger/helper-scripts/wsgi-loader.py", line 171
    buf = b''
            ^

SyntaxError: invalid syntax
有趣的是,尽管看起来乘客号是在2014年5月15日更新的,但所有这些助手脚本都可以追溯到2013年10月26日。是不是像这些助手脚本与新安装的Passenger版本过时这样简单?我原以为乘客本身就是语言不可知论者

编辑3:忽略
virtualenv

因此,系统安装的Python版本是2.5.2,而我构建应用程序的
virtualenv
Python版本是2.6.8。所以这个错误不应该出现。我已经按照添加了我的2.6.8 Python解释器,但它仍然不工作,错误消息仍然表明正在使用旧的Python解释器。有什么想法吗

编辑4:正在使用正确(有效)的virtualenv Python解释器(2.6.8)


看起来您正在运行Python2.5或更早版本,它不支持字节字符串声明语法。Phusion乘客。

我在Phusion乘客名单上问了同样的问题,宏利也在那里回答了我(谢谢宏利!!):

Dreamhost的文档已经过时,他们的支持团队对Phusion乘客配置/问题不太熟悉

事实证明,在将定义的
virtualenv
Python解释器加载到
Passenger\u wsgi.py
文件之前,Passenger还需要至少Python2.6才能启动(如果您将其用于Python应用程序或Django之类的框架)。要实现这一点,您需要修改Nginx的配置方式

编辑Nginx配置文件(
Nginx.conf
)并添加以下行:

http {
    passenger_root ...;

    # Use Python 2.6 by default.
    passenger_python /home/<user>/venv/<venv-name>/bin/python2.6;


    server {
        <snip>
    }
}
http{
客根。。。;
#默认情况下使用Python2.6。
乘客/python/home//venv//bin/python2.6;
服务器{
}
}
这迫使乘客使用
Passenger\u Python
中定义的Python解释器启动。瞧再次运行Web服务器


感谢您发布此消息,我遇到了一个非常类似的问题。顺便问一下,您的错误消息是什么?我在Edit 2中发布了错误消息,并在Edit 3中添加了有关我的virtualenv Python(2.6.8)的更多信息,这应该是正在使用的。我从Dreamhost收到回音:“对于新版本的乘客重定向,STDOUT会导致错误,因为乘客使用该输出跟踪进程。”他们在我的WSGI处理程序脚本中注释了行
#sys.stdout=sys.stderr
,从而修复了错误。不确定这是否适合您的情况,但希望能有所帮助。谢谢!我收到了一封来自Dreamhost的电子邮件,上面说的正是这件事。我在网站的
virtualenv
中运行的Python版本是2.6.8。我遵循了添加虚拟主机Python解释器的方法,但仍然失败。有什么想法吗?谢谢
2.6.8 (unknown, Jul 10 2012, 08:03:16)
[GCC 4.3.2]
http {
    passenger_root ...;

    # Use Python 2.6 by default.
    passenger_python /home/<user>/venv/<venv-name>/bin/python2.6;


    server {
        <snip>
    }
}