私のDjango1.3プロジェクトは、開発サーバーで静的ファイルを提供しますが、gunicornサーバーでは静的ファイルは提供されません。このHerokuガイドの手順に従いました。
ガイド()のようにprocfileの内容を使用すると
web: gunicorn myproject_django.wsgi -b 0.0.0.0:$PORT
、プロジェクトがHerokuに認識されませんでした。
次に、そのProcfileを次のように変更しました。
web: python myproject_django/manage.py run_gunicorn -b 0.0.0.0:$PORT -w 3
これで、静的ファイル(cssがアクティブでも画像でもない)を除いてアプリが実行されます。
私のプロジェクトツリー:
.
├── Procfile
├── myproject_django
│ ├── core
│ │ ├── admin.py
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── static
│ │ │ ├── css
│ │ │ │ ├── base.css
│ │ │ │ ├── layout.css
│ │ │ │
│ │ │ └── media
│ │ │ ├── pek.ico
│ │ │ ├── pek.png
│ │ │ ├── pek_symbol.png
│ │ ├── tests.py
│ │ └── views.py
│ ├── __init__.py
│ ├── manage.py
│ ├── settings.py
│ ├── templates
│ │ └── core
│ │ ├── home.html
│ │ └── install.html
│ └── urls.py
└── requirements.txt
settings.pyの潜在的に関連する部分
MEDIA_ROOT = ''
MEDIA_URL = '/static/media'
STATIC_ROOT = ''
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = (
os.path.abspath(__file__)+'/..'+'/myproject_django/core/static',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
'gunicorn',
'django.contrib.admin',
)
編集
Francis Yaconielloのエントリー後、次のことを調整しました。
settings.pyで
STATIC_ROOT = os.path.join(os.getcwd(),'core/static')
STATICFILES_DIRS = ( os.path.abspath(__file__)+'/..'+'/core/static', )
gitignoreの場合:
staticfiles/*
その後、コミットしました。そして最後に走っheroku run python myproject_django/manage.py collectstatic
た。
しかし、Webページを確認しても、静的ファイルはまだ提供されていません。私のディレクトリツリーを考えると、なぜこれらの変更が機能しなかったのですか?
Edit2
静的ファイルがまだ表示されません。DEBUG=True
これを取得しているときに画像をクリックすると、次のようになります。
Request URL: http://myproject.herokuapp.com/static/media/pek.png
ツリーstaticfiles
(ディレクトリが空であることに注意してください)
.
├── Procfile
├── myproject_django
│ ├── admin
│ ├── core
│ │ ├── admin.py
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── static
│ │ │ ├── css
│ │ │ │ ├── base.css
│ │ │ │ ├── layout.css
│ │ │ └── media
| | | ├── pek.ico
| │ │ ├── pek.png
| │ │ ├── pek_symbol.png
│ │ ├── tests.py
│ │ ├── views.py
│ ├── __init__.py
│ ├── manage.py
│ ├── settings.py
│ ├── staticfiles
│ ├── templates
│ │ └── core
│ │ ├── 404.html
│ │ ├── 500.html
│ │ ├── home.html
│ │ └── install.html
│ ├── urls.py
└── requirements.txt
settings.pyで
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'static/media')
STATIC_ROOT = os.path.join(PROJECT_PATH,'staticfiles')
STATICFILES_DIRS = (
os.path.join(PROJECT_PATH, 'core/static'),
)