python - Dreamhost + Passenger + Django 故障排除

标签 python django nginx passenger dreamhost

我有一个网站,它在 Dreamhost + Passenger + Django 上愉快地运行了好几年。最近(上周四)Dreamhost 似乎在没有通知我的情况下更新了 Passenger,这导致网站无法访问。

这是已安装(托管)的 Passenger 目录:

$ 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

这些文件更新时间与网站宕机时间大致相同。

我认为这可能是通过 touch-ing /path/to/app/tmp/restart.txt 重新启动 Passenger 的简单案例,但这似乎不是工作过。我有什么办法解决这个问题吗?

提前致谢。

编辑 1: 网络服务器是 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

有趣的是,虽然看起来 Passenger 是在 2014-05-15 更新的,但所有这些帮助脚本都可以追溯到 2013-10-26。是不是很简单,比如这些帮助脚本在新安装的 Passenger 版本中已经过时了?我曾以为 Passenger 本身与语言无关?

编辑 3: virtualenv 被忽略

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

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

import sys, os
INTERP = "/home/<user>/venv/tcs/bin/python2.6"
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)
# print(sys.version)
sys.path.append(os.getcwd())
sys.path.append(os.path.join(os.getcwd(), '/home/<user>/<application>/<dir>'))
os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

(<user>, <application> and <dir> hidden for obvious reasons)

当我取消注释 print(sys.version) 时,我得到以下输出:

2.6.8 (unknown, Jul 10 2012, 08:03:16)
[GCC 4.3.2]

最佳答案

看起来您正在运行 Python 2.5 或更早版本,它们不支持字节字符串声明语法。 Phusion客运requires Python 2.6 or later .

关于python - Dreamhost + Passenger + Django 故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23725107/

相关文章:

python - 如何从雅虎获取历史ESG数据?

python - 避免在 python 中重复键入类名

python - 如何将临时 .docx 文件添加到 django 中的 zip 存档中

python - Django – 生成 html 电子邮件的纯文本版本

mysql - 使用 nginx 和两个物理 Linux 服务器实现 Web 应用程序的可扩展性

python - 按组检查一个数据框中的日期是否位于另一个数据框中的两个日期之间

python - 类型错误 : __init__() got multiple values for keyword argument 'encoding'

javascript - 如何在 Django bool 字段中使用切换开关?

nginx - ffmpeg 或 vlc 播放列表到 rtmp 流?

php - hhvm 不会在运行时更改 error_log ini 设置