Heroku和Django:"OSError:没有这样的文件或目录:'/ app/{myappname}/static'"

Rex*_*exE 29 python git django heroku django-staticfiles

我在Heroku上有一个Django应用程序.我有一些静态文件的问题(它们在一个Heroku 环境中加载而不是另一个),所以我尝试了这里推荐的调试命令.

$ 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'
Run Code Online (Sandbox Code Playgroud)

这是我的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'),
)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是否在我的Git仓库中的根级别实际上有一个"静态"目录(以两种方式测试).

有任何想法吗?

joe*_*ick 47

它正在寻找一个名为'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
Run Code Online (Sandbox Code Playgroud)

请注意,git不会跟踪空文件夹,因此如果空文件为空,则必须在其中放置一个空文件.或者,删除STATICFILES_DIRS设置,直到需要它为止.

  • 几乎没有什么对我有用,除了最后一项"或者,删除STATICFILES_DIRS设置,直到你需要它",这使一切工作都很漂亮.Heroku不会"收集静电",直到那条线消失. (2认同)

Mic*_*ser 14

我只是遇到了同样的问题,这里有适合我的解决方案:

我变了:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Run Code Online (Sandbox Code Playgroud)

至:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'myappfolder/static'),
)
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于我,虽然我的路径需要移动目录:`os.path.join(BASE_DIR,'../myappfolder/static')` (2认同)