我正试图在弹性豆茎上放置一个简单的django应用程序。我认为我已经找到了应用程序的静态部分,因为它与heroku和手动设置的服务器一起使用。在调试中我甚至检查了静态目录中的静态文件以尝试简化操作。映射看起来很奇怪,因为它似乎没有遵循STATIC_ROOT。
我的相关配置: settings.py
PROJECT_ROOT = os.path.abspath(os.path.dirname(__name__))
STATIC_ROOT = os.path.join(PROJECT_ROOT,'static/')
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
urls.py
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
日志:
[Wed Dec 26 15:39:04 2012] [error] [client 10.29.203.20] File does not exist: /opt/python/current/app/css, referer 10.29.203.20 - -
[26/Dec/2012:15:39:04 +0000] "GET /static/css/styles.css HTTP/1.1" 404 329 "http://" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11"
答案 0 :(得分:19)
您找到了解决方案了吗?只是让你知道。我今天遇到了同样的问题,我意识到我在.ebextensions / .config文件中忘记了这个选项。确保你也拥有它
option_settings:
- namespace: aws:elasticbeanstalk:container:python:staticfiles
option_name: /static/
value: static/
答案 1 :(得分:7)
要支持多个应用并执行此操作,您需要运行collectstatic
Settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static")
确保您有一个名为&#34; static&#34;的文件夹。在你的根
在您的ebs配置文件中,例如。 (02_python.config或类似的)
option_settings:
...
"aws:elasticbeanstalk:container:python:staticfiles":
/static/: "static/"
然后在上传到ebs之前运行python manage.py collectstatic
这会收集您已在配置中指向的一个文件夹中的所有静态文件。
然后你可以像正常一样运行eb deploy
有时候,如果您不想将静态文件提交到源控件两次并希望服务器执行此操作,请将其添加到您的配置
container_commands:
01_collectstatic:
command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput"
所以你的文件应该是这样的:
container_commands:
01_collectstatic:
command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput"
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: app/wsgi.py
"aws:elasticbeanstalk:container:python:staticfiles":
/static/: "static/"
当您运行eb deploy
答案 2 :(得分:6)
如果您的环境使用基于 Amazon Linux 2 的平台分支,则正确设置 .ebextensions 文件夹内的 .config 文件
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: static
在您的项目 settings.py 中,您应该:
STATIC_URL = '/static/'
STATIC_ROOT = 'static'
答案 3 :(得分:5)
对我来说,问题在于
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
相反,我将其更改为
STATIC_ROOT = 'static'
另外,我的.conf文件有
option_settings:
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "static/"
答案 4 :(得分:5)
请大家知道,最新版本的EBS中静态文件的命名空间已更改为aws:elasticbeanstalk:environment:proxy:staticfiles
,如下所示:
option_settings:
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: static
答案 5 :(得分:1)
我做了以下操作来修复beantalk中的静态路径
STATIC_URL = '/static/'
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
option_settings:
...
...
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "static/"
答案 6 :(得分:1)
以前的所有答案都对我没有帮助 这对我有用。
基本上,我在L 10 20 30 40 50
内创建了两个步骤
.ebextensions
01_django.config
container_commands:
01_migrate:
command: "source /opt/python/current/env && source /opt/python/run/venv/bin/activate && cd /opt/python/current/app && python manage.py migrate --noinput"
leader_only: true
02_touch_superuser:
command: "source /opt/python/current/env && source /opt/python/run/venv/bin/activate && cd /opt/python/current/app && python manage.py touch_superuser"
leader_only: true
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: config/wsgi.py
NumProcesses: 2
NumThreads: 10
aws:elasticbeanstalk:application:environment:
STAGING: 1
DJANGO_SETTINGS_MODULE: config.settings.production
aws:elasticbeanstalk:container:python:staticfiles:
"/static/": "htdocs/static/"
"/media/": "htdocs/media/"
可能是您项目中的其他路径
config/wsgi.py
02_collec_static.config
重要的是,您files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/10_collect_static.sh":
mode: "000755"
owner: root
group: root
content: |
set -xe
source /opt/python/current/env
source /opt/python/run/venv/bin/activate
cd /opt/python/current/app && python manage.py collectstatic --noinput
echo "Statics collected...!!"
应该与EBS服务的静态路径匹配,在我的情况下,这是我的配置。
settings/*.py
答案 7 :(得分:0)
我为此苦苦挣扎了一段时间,以为问题出在:
option_settings:
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "static/"
但是实际上我的问题是xxx.config文件中的其他命令。 基本上,请确保其他行正确。
如果您想了解我的个人设置,请使用上面显示的设置文件,并将静态目录添加到项目的根目录中。 对于settings.py文件,这里是我的static_url和root的文件:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = 'static'
希望有帮助!