首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Saleor Django Apache mod_wsgi将不会提供/static/admin/

Saleor Django Apache mod_wsgi将不会提供/static/admin/
EN

Stack Overflow用户
提问于 2015-12-12 04:32:19
回答 2查看 729关注 0票数 0

我以非特权用户的身份使用apache在虚拟环境下运行saleor django应用程序。

实际上,让一切顺利进行是相当简单的,但有一点让我困惑。

未为站点的/static/admin/部分提供服务。

到目前为止,我已经查看了deployment docsother advice,但没有找到任何有用的东西。

我的/static/目录可以很好地使用。我相信这对非django-noob来说是很明显的,但这就是我我不确定是否可以在另一个别名目录中为子目录指定别名。我不想求助于符号链接。

代码语言:javascript
复制
# 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包括在内以获取智能。

代码语言:javascript
复制
# 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()
EN

回答 2

Stack Overflow用户

发布于 2015-12-12 04:40:35

您不应该尝试让Apache直接从您自己的应用程序或管理应用程序的静态目录中提供服务。取而代之的是,遵循文档并使用collectstatic命令将所有应用程序的静态文件收集到一个位置并从那里提供服务。

票数 0
EN

Stack Overflow用户

发布于 2015-12-14 23:38:44

我不理解关于serving the admin filesdjango-admin collectstatic的文档。

提供管理文件的文档指出,如果在settings.py的INSTALLED_APPS部分启用了"django.contrib.staticfiles“,则建议settings.py中的静态列表应包含django为其开发服务器提供的”静态“目录(django/contrib/ admin / STATICFILES_DIRS /admin)的路径。

其中一个被告知使用集合静态管理命令,该命令会将文件物理地复制到“静态”目录中,您将在sitename.conf文件中将该目录配置为ServerRoot,以便apache提供服务。

我的问题在很大程度上是一个菜鸟错误。我遵循了这些说明,但我并不知道关于实际使用的是什么来运行"collectstatic“命令有某种公认的智慧。

而不是

代码语言:javascript
复制
django-admin collecstatic

一个需要(在我的例子中,是ymmv)

代码语言:javascript
复制
python manage.py collectstatic

当我用django-admin调用collectstatic时,我得到了一个令人抓狂的错误:

代码语言:javascript
复制
ImportError: No module named saleor.settings

这让我非常困惑,因为我在.env文件和wsgi.py文件中都设置了enivronment变量。我认为这可能是virtualenv的某种怪癖。在命令行上设置此变量会导致:

代码语言:javascript
复制
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设置和我编辑过的每个配置文件。幸运的是,他们都很好。实际的调用是用

代码语言:javascript
复制
$ 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/的路径。这里没有什么神奇之处,只是复制静态文件。

因此:

代码语言:javascript
复制
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可以擦掉汗水。

谢谢,大牛!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34232080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档