我在Heroku上有一个Django应用程序。我在使用静态文件时遇到了一些问题(它们在一个Heroku environment但不是另一个文件中加载),所以我尝试了调试命令here。
$ heroku run python manage.py collectstatic --noinput
Running `python manage.py collectstatic --noinput` attached to terminal... up, run.8771
OSError: [Errno 2] No such file or directory: '/app/{myappname}/static'
这是我的settings.py,这与Heroku建议的相同:
import os
import os.path
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
我得到的错误是否在我的Git仓库中的根级别实际上有一个“静态”目录(以两种方式测试)。
有什么想法吗?
答案 0 :(得分:46)
它正在寻找一个名为'static'的文件夹,它位于settings.py的旁边,即在项目文件夹中,而不是在git repo的根目录下。
git root/
git root/{app name}
git root/{app name}/settings.py
git root/{app name}/static/ <- this is what you're missing
请注意,git不会跟踪空文件夹,因此如果空文件为空,则必须在其中放置一个空白文件。或者,删除STATICFILES_DIRS
设置,直到您需要它为止。
答案 1 :(得分:13)
我刚遇到同样的问题,这是适用于我的解决方案:
我改变了:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
为:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'myappfolder/static'),
)
答案 2 :(得分:1)
@ joerick上面的答案是关键。但是,如果你不想放置另一个静态的&#39;文件夹(git root / {your app} / static),您可以考虑更改最初由django-admin makeproject提供的BASE_DIR变量:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
只是(git root /)目录