亚马逊弹性魔豆不服务Django的静态文件(Amazon Elastic Beanstalk not

2019-08-04 18:03发布

我试图把一个简单的Django应用程序弹性魔豆。 我以为我有应用程序的静态部分想通了,因为它与Heroku的和手动设置的服务器上工作。 在调试我即使在静态目录推静态文件检查,以尽量把事情简单化。 映射似乎很奇怪,因为它似乎并没有跟随STATIC_ROOT。

我的相关CONFIGS: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"

Answer 1:

你有没有找到解决办法? 只是让你知道。 今天我在同样的问题来了,我意识到,我忘了在.ebextensions / config文件这个选项。 确保你有太

option_settings:
  - namespace: aws:elasticbeanstalk:container:python:staticfiles
    option_name: /static/
    value: static/


Answer 2:

为了支持多个应用程序,并做到这一点,你需要运行collectstatic

Settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "static")

请确保你已经在你的根称为“静态”的文件夹

在您的EBS配置文件如。 (02_python.config或类似的)

option_settings:
    ...
    "aws:elasticbeanstalk:container:python:staticfiles":
        /static/: "static/"

然后,你上传到EBS之前运行python manage.py collectstatic

这个收集在一个文件夹中,你已经在你的配置指出,所有的静态文件。

然后你可以运行eb deploy像正常

Opptionally如果你不想两次提交静态文件到您的源代码控制和希望服务器为你做这个添加到您的配置

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



Answer 3:

对我来说,这个问题是有

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')

相反,我把它改成

STATIC_ROOT = 'static'

另外,我的.conf文件中有

option_settings:
  "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "static/"


Answer 4:

我做了以下解决在豆茎静态路径

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/"


文章来源: Amazon Elastic Beanstalk not serving django static files