用于生产的 Django 部署
Django Deployment for Production
我的本地机器上有 Django 运行,但我正处于要将 Django 站点部署到生产服务器的位置。我的服务器是 Ubuntu 14.04 服务器,Apache 2.x、python 2.7 和 Django 1.8。我尝试使用 Django 的 Apache 基本配置和 mod_wsgi link,但我不断收到以下错误:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
这是我收到的 Apache 错误日志中的错误:
mod_wsgi (pid=14962): Target WSGI script '/var/www/tmws/tmws/wsgi.py' cannot be loaded as Python module.,
mod_wsgi (pid=14962): Exception occurred processing WSGI script '/var/www/tmws/tmws/wsgi.py'.,
Traceback (most recent call last):,
File "/var/www/tmws/tmws/wsgi.py", line 21, in <module>,
application = get_wsgi_application(),
File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application,
django.setup(),
File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup,
apps.populate(settings.INSTALLED_APPS),
File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 85, in populate,
app_config = AppConfig.create(entry),
File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 86, in create,
module = import_module(entry),
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module,
__import__(name),
File "/var/www/tmws/django_tables2/__init__.py", line 2, in <module>,
from .tables import Table,
File "/var/www/tmws/django_tables2/tables.py", line 15, in <module>,
from . import columns,
File "/var/www/tmws/django_tables2/columns/__init__.py", line 1, in <module>,
from .base import library, BoundColumn, BoundColumns, Column,
File "/var/www/tmws/django_tables2/columns/base.py", line 10, in <module>,
from django_tables2.utils import Accessor, AttributeDict, OrderBy, OrderByTuple,
File "/var/www/tmws/django_tables2/utils.py", line 111, in <module>,
@six.python_2_unicode_compatible,
AttributeError: 'module' object has no attribute 'python_2_unicode_compatible',
这是我的 apache2.conf 文件:
...
<Directory /var/www/tmws/tmws>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
...
WSGIScriptAlias / /var/www/tmws/tmws/wsgi.py
WSGIPythonPath /var/www/tmws
这是我的 wsgi.py 文件:
import os, sys
from django.core.wsgi import get_wsgi_application
sys.path.append('/home/ubuntu/gather/src')
sys.path.append('/usr/local/lib/python2.7/dist-packages')
sys.path.append('/var/www/tmws')
sys.path.append('/var/www/tmws/tmws')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tmws.settings")
application = get_wsgi_application()
这是我的网站 .conf 文件:
<VirtualHost *:80>
ServerAdmin xxxxxxxx
ServerName xxxxxxxxxxx
DocumentRoot /var/www/tmws
WSGIScriptAlias / /var/www/tmws/tmws/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/TMWSerror.log
CustomLog ${APACHE_LOG_DIR}/TMWSaccess.log combined
</VirtualHost>
如有任何帮助,我们将不胜感激。如果还有什么我可以post帮忙告诉我的。
您的系统可能正在使用不包含 python_2_unicode_compatible
方法的 six
python 软件包的旧版本。将 6 升级到最新版本应该可以修复它:
pip install --upgrade six
也就是说,强烈建议从虚拟环境 运行 Django 而不是在系统级别安装包 - 如果有系统包由于某种原因依赖于旧版本 six
那么你可能 运行 陷入其他问题。
我的本地机器上有 Django 运行,但我正处于要将 Django 站点部署到生产服务器的位置。我的服务器是 Ubuntu 14.04 服务器,Apache 2.x、python 2.7 和 Django 1.8。我尝试使用 Django 的 Apache 基本配置和 mod_wsgi link,但我不断收到以下错误:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
这是我收到的 Apache 错误日志中的错误:
mod_wsgi (pid=14962): Target WSGI script '/var/www/tmws/tmws/wsgi.py' cannot be loaded as Python module.,
mod_wsgi (pid=14962): Exception occurred processing WSGI script '/var/www/tmws/tmws/wsgi.py'.,
Traceback (most recent call last):,
File "/var/www/tmws/tmws/wsgi.py", line 21, in <module>,
application = get_wsgi_application(),
File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application,
django.setup(),
File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup,
apps.populate(settings.INSTALLED_APPS),
File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 85, in populate,
app_config = AppConfig.create(entry),
File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 86, in create,
module = import_module(entry),
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module,
__import__(name),
File "/var/www/tmws/django_tables2/__init__.py", line 2, in <module>,
from .tables import Table,
File "/var/www/tmws/django_tables2/tables.py", line 15, in <module>,
from . import columns,
File "/var/www/tmws/django_tables2/columns/__init__.py", line 1, in <module>,
from .base import library, BoundColumn, BoundColumns, Column,
File "/var/www/tmws/django_tables2/columns/base.py", line 10, in <module>,
from django_tables2.utils import Accessor, AttributeDict, OrderBy, OrderByTuple,
File "/var/www/tmws/django_tables2/utils.py", line 111, in <module>,
@six.python_2_unicode_compatible,
AttributeError: 'module' object has no attribute 'python_2_unicode_compatible',
这是我的 apache2.conf 文件:
...
<Directory /var/www/tmws/tmws>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
...
WSGIScriptAlias / /var/www/tmws/tmws/wsgi.py
WSGIPythonPath /var/www/tmws
这是我的 wsgi.py 文件:
import os, sys
from django.core.wsgi import get_wsgi_application
sys.path.append('/home/ubuntu/gather/src')
sys.path.append('/usr/local/lib/python2.7/dist-packages')
sys.path.append('/var/www/tmws')
sys.path.append('/var/www/tmws/tmws')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tmws.settings")
application = get_wsgi_application()
这是我的网站 .conf 文件:
<VirtualHost *:80>
ServerAdmin xxxxxxxx
ServerName xxxxxxxxxxx
DocumentRoot /var/www/tmws
WSGIScriptAlias / /var/www/tmws/tmws/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/TMWSerror.log
CustomLog ${APACHE_LOG_DIR}/TMWSaccess.log combined
</VirtualHost>
如有任何帮助,我们将不胜感激。如果还有什么我可以post帮忙告诉我的。
您的系统可能正在使用不包含 python_2_unicode_compatible
方法的 six
python 软件包的旧版本。将 6 升级到最新版本应该可以修复它:
pip install --upgrade six
也就是说,强烈建议从虚拟环境 运行 Django 而不是在系统级别安装包 - 如果有系统包由于某种原因依赖于旧版本 six
那么你可能 运行 陷入其他问题。