服务媒体文件时Heroku I / O错误

时间:2017-05-23 03:52:22

标签: django heroku

我正在尝试将网站部署到Heroku,我在使用Whitenoise遇到麻烦并在DEBUG = False时提供媒体服务。

当DEBUG打开时,我已经让网站工作但是在添加Whitenoise之后服务器抛出并且在尝试提供我知道的文件时出现I / O错误,甚至是DEBUG已启用。

我的静态文件配置为

[10, 10, 20, 50, 50, 75]
[40, 75, 100]
[10, 10, 20, 50, 50, 75]

当我尝试加载首页时,其中包含我知道存储在“媒体”中的图像我

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, '../pages/static'),
]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

这是我用Heroku部署的第一个应用程序,也是我用Django编写的第一个网站,所以我仍然试图了解它是如何工作的。我以为我应该能够将Whitenoise中间件添加到开发过程中的静态文件设置中,它应该只是工作,但显然我做错了。

2 个答案:

答案 0 :(得分:0)

这是在本地或部署的网站上运行heroku时遇到的错误吗?

如果在本地运行站点时发生这种情况,则以不同方式提供静态文件。这来自Django docs

  

在开发期间,如果使用django.contrib.staticfiles,当DEBUG设置为True时,这将由runserver自动完成(请参阅django.contrib.staticfiles.views.serve())。

     

这种方法效率极低,可能不安全,因此不适合生产。

因此,当debug为False时,您需要更改settings.py以链接到远程静态文件。这可能需要一些研究,我发现将调试设置为true更容易。

或者在已部署的heroku站点上,我的模板中有错误的静态标记出现了这种错误,例如文件位置不正确,这只会导致调试关闭时出错。

答案 1 :(得分:0)

我明白了。 WhiteNoise就像添加文档中提到的几行一样简单,我的问题是我已经改变了我的静态文件存储和分配之间的工作时间和添加这些行的时间。

最后我使用AWS S3,因为它可以提供静态和媒体文件。我在那里也遇到了很多问题,因为我需要设置我的主机并包含我的区域,但这一切都已经解决了。