我以非特权用户的身份使用apache在虚拟环境下运行saleor django应用程序。
实际上,让一切顺利进行是相当简单的,但有一点让我困惑。
未为站点的/static/admin/部分提供服务。
到目前为止,我已经查看了deployment docs和other advice,但没有找到任何有用的东西。
我的/static/目录可以很好地使用。我相信这对非django-noob来说是很明显的,但这就是我我不确定是否可以在另一个别名目录中为子目录指定别名。我不想求助于符号链接。
# 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包括在内以获取智能。
# 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()发布于 2015-12-12 04:40:35
您不应该尝试让Apache直接从您自己的应用程序或管理应用程序的静态目录中提供服务。取而代之的是,遵循文档并使用collectstatic命令将所有应用程序的静态文件收集到一个位置并从那里提供服务。
发布于 2015-12-14 23:38:44
我不理解关于serving the admin files或django-admin collectstatic的文档。
提供管理文件的文档指出,如果在settings.py的INSTALLED_APPS部分启用了"django.contrib.staticfiles“,则建议settings.py中的静态列表应包含django为其开发服务器提供的”静态“目录(django/contrib/ admin / STATICFILES_DIRS /admin)的路径。
其中一个被告知使用集合静态管理命令,该命令会将文件物理地复制到“静态”目录中,您将在sitename.conf文件中将该目录配置为ServerRoot,以便apache提供服务。
我的问题在很大程度上是一个菜鸟错误。我遵循了这些说明,但我并不知道关于实际使用的是什么来运行"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:然后,它会神奇地复制我需要的东西(我希望如此!)放到我的project/static目录中。
我的新手错误是没有先阅读django-admin and manage.py,因此发现便利性脚本有一个便利性脚本。机枪射击
另一个令人困惑的地方(至少对我来说)是断言不应该提供来自“应用程序”或“管理应用程序”的静态文件。这并不意味着不在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 /目录提供的静态文件!
/me可以擦掉汗水。
谢谢,大牛!
https://stackoverflow.com/questions/34232080
复制相似问题