我正在使用apache作为非特权用户使用virtualenv运行saleor django应用程序。
实际上让一切都进行起来相当简单,但有一点令我感到困惑。
未提供网站的/ static / admin /部分。
我查看了deployment docs和other advice,但到目前为止找不到任何帮助。
我的/ static /目录服务很好。我确信这对非django-noob来说非常明显,但那就是我。我不确定它是另一个别名目录中的子目录别名的copacetic。我宁愿不诉诸符号链接。
# dev-site.conf
WSGIPythonPath/home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages
<VirtualHost *:80>
ServerName example.com
ServerAdmin email@example.com
DocumentRoot "/home/admin/project"
WSGIDaemonProcess example.com python-path=/home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com
WSGIScriptAlias / /home/admin/project/saleor/wsgi.py
Alias /media/ /home/admin/project/media/
<Directory /home/admin/project/media/>
Require all granted
</Directory>
Alias /favicon.ico /home/admin/project/saleor/static/images/favicon.ico
Alias /robots.txt /home/admin/project/saleor/static/robots.txt
Alias /static/ /home/admin/project/saleor/static/
<Directory /home/admin/project/saleor/static/>
Require all granted
</Directory>
Alias /static/admin/ /home/admin/project/venv/lib/python2.7/site-packages/django/contrib/admin/static/admin/
<Directory /home/admin/project/venv/lib/python2.7/site-packages/django/contrib/admin/static/admin/>
Require all granted
</Directory>
<Directory /home/admin/project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我将我的saleor / wsgi.py包含在smarts中。
# wsgi.py
python
import os
import sys
import site
site.addsitedir("/home/admin/project/venv/lib/python2.7/site-packages")
os.environ.setdefault("SECRET_KEY", "br549")
os.environ.setdefault("MYSQL_DB_URL", "mysql://dbuser:doublesecret@dbuser-dev.example.com:3306/saleor")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "saleor.settings")
project = "/home/admin/project/saleor"
workspace = os.path.dirname(project)
sys.path.append(workspace)
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
答案 0 :(得分:0)
您不应该尝试让Apache直接从您自己的应用程序或管理应用程序的静态目录中提供服务。相反,请按照文档并使用collectstatic
命令在一个位置收集所有应用程序的静态文件,然后从那里提供服务。
答案 1 :(得分:0)
我不理解serving the admin files或django-admin collectstatic上的文档。
提供管理文件的文档表明,如果在settings.py的INSTALLED_APPS部分中启用了“django.contrib.staticfiles”,则建议settings.py中的STATICFILES_DIRS列表包含“ django为它的开发服务器提供的静态“目录(django / contrib / admin / static / admin)。
有人告诉我们使用collectstatic管理命令,该命令将文件物理地复制到您将在sitename.conf文件中配置为ServerRoot的“静态”目录中,以便为其提供服务。
我的问题几乎是一个菜鸟错误。我按照说明操作,却不知道有什么实际用于运行“collectstatic”命令的知识。
而不是
django-admin collecstatic
需要(在我的情况下,ymmv)
python manage.py collectstatic
当使用django-admin调用collectstatic时,我遇到了令人抓狂的错误:
ImportError: No module named saleor.settings
这对我来说非常困惑,因为我在我的.env文件和我的wsgi.py文件中设置了enivronment变量。我认为这可能是与virtualenv的某种怪癖。在命令行上设置此变量导致:
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
这导致了我非常恶心的兔子洞。我的virtualenv设置和我编辑过的每个配置文件。幸运的是,他们很好。实际调用是
$ python manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings:
/home/admin/project/static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel:
然后将我需要的东西(我希望!)神奇地复制到我的项目/静态目录中。
我的noob错误不是先读django-admin and manage.py,因此发现便利脚本有一个便利脚本。 边敲击
另一点困惑(对我而言,无论如何)是一个断言,即不应该从“app”或“admin app”提供静态文件。我想一个更简单的方法是:“必须运行一个脚本,它可以包装或复制rsync,从而复制静态文件来自myapp / static和〜/ project / venv / lib / python2.7 / contrib / admin所以apache将无法播放重要文件的愚蠢错误“。这并不意味着没有在sitename.conf文件中放置/ static /的路径。这里没有魔法,只是复制静态文件。
因此:
WSGIPythonPath /home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages
<VirtualHost *:80>
ServerName example.com
ServerAdmin email@example.com
DocumentRoot "/home/admin/project"
Alias /media/ /home/admin/project/media/
<Directory /home/admin/project/media/>
Require all granted
</Directory>
Alias /static/ /home/admin/project/static/
<Directory /home/admin/project/static/>
Require all granted
</Directory>
WSGIDaemonProcess example.com python-path=/home/admin/project/saleor:/home/admin/project/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com
WSGIScriptAlias / /home/admin/project/saleor/wsgi.py
<Directory /home/admin/project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我现在从〜/ project / static /目录中提供静态文件!
/我擦掉汗水。
谢谢丹尼尔!