【问题标题】:Django Static Files on DreamhostDreamhost 上的 Django 静态文件
【发布时间】:2012-10-12 21:37:02
【问题描述】:

我有一个 Dreamhost 共享服务器,用于托管 Passenger Python/Django。目前我有一个收集非 python 文件的全局文件夹(/public/static、/public/media)。当我“收集静态”时,我的所有应用程序的 */static 文件都会被复制到全局 /public/static 文件夹中。到目前为止还不错。

1) 我已经厌倦了使用 collectstatic。我想删除我的应用程序的 */static 文件夹并将它们的文件放在全局 /public/static 中。这适用于 Dreamhost,因为 Passenger Python 将 Apache 的文档根指向 /public,它将正确检索 /public/static 和 /public/media。但是在开发方面我没有这样的功能(在 python manage.py 下)。

2) Dreamhost/共享主机下的静态/缓存文件有什么优化?

以下是我的设置:

网站设置:

STATICFILES_DIRS = (
    ABS_PATH + '/???/???/static/', #My App's static dir
)

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder'
)

TEMPLATE_DIRS = (
#ABS_PATH + '/hdrtoronto/hdrtoronto/templates/'
ABS_PATH + '/templates/'
)

网址.py:

if os.environ.get("django_dev", None):
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)

【问题讨论】:

    标签: python django dreamhost


    【解决方案1】:

    STATIC_ROOTMEDIA_ROOT 需要位于您的 Django 项目之外。因此,collecstatic 管理命令将您的所有静态资源配置在外部位置,这是它的本意。

    我建议您重新考虑如何管理静态文件。您即将做一些非常错误的事情,恐怕您完全没有抓住重点并违反正确的框架行为。

    【讨论】:

    • 是的,STATIC_ROOT、MEDIA_ROOT都放在项目外。实际上,在生产中它工作得很好(所有文件都放在全局/静态中)但是对于开发(问题出现的地方)却没有。在应用程序的 /static 中拥有 GIGS 图像然后将其复制到全局 /static 是没有意义的。如果 collectstatic 最后将文件复制到全局/static,那么我应该有能力在开发过程中不处理它。 Django 对应用程序模块化的实现完全是矫枉过正,尤其是当我的大多数网站都是特定于域/耦合时。
    • 我完全理解您可能不同意 Django 将架构分解为 Django 应用程序,这是一个非常独特的框架功能,但这些静态资源构成了您的应用程序的一部分。 Web 服务器有自己的首选资产位置,并具有受监管的访问权限——因为您通常不授予 Web 服务器访问权限,也不编写内容,例如上传到源包中的路径,因此需要外部STATIC_ROOTMEDIA_ROOTcollectstatic 命令。
    猜你喜欢
    • 2013-08-24
    • 2014-02-04
    • 2014-08-27
    • 2014-04-15
    • 2019-07-11
    • 2020-11-06
    • 2021-06-03
    • 2014-02-26
    • 2021-03-18
    相关资源
    最近更新 更多