【问题标题】:Gunicorn can't find staticfiles after dockerizationdocker化后Gunicorn找不到静态文件
【发布时间】:2017-11-08 03:48:55
【问题描述】:

我在 Ubuntu 17.04 Zesty 上使用 docker 17.05.0-cs edge。我有一个我构建的 gunicorn/Django 应用程序here。它在被 dockerized 之前运行良好,但是 gunicorn 在docker build 之后看不到静态文件。这里是Dockerfile

# Dockerfile

# FROM base image to build upon
FROM phusion/baseimage

# RUN install python and pip
RUN apt-get update
RUN apt-get install -y python python-pip python-dev 

# ENV set environment directory tree
ENV PROJECT=mysite
ENV CONTAINER_HOME=/opt
ENV CONTAINER_PROJECT=$CONTAINER_HOME/$PROJECT

# move to project WORKDIR
WORKDIR $CONTAINER_PROJECT

# COPY project to container directory
COPY . $CONTAINER_PROJECT

# RUN pip and install requirements
RUN pip install -r requirements.txt


# COPY start.sh into known container location 
COPY start.sh /start.sh

# EXPOSE port 8000 to allow communication to/from server
EXPOSE 8000

# CMD execute start.sh to start the server running.
CMD ["/start.sh"]
# done!

应用程序运行并显示页面,有趣的是,它甚至应用了css 模板,同时说找不到bootstrap.cssbootstrap.js。它不会执行脚本来切换菜单。当前的模板只是我最初构建的一个工件,新的甚至不会使用bootstrap.js 我很确定。它运行但切换不起作用,我知道这是bootstrap.js 的一个功能。这是sudo docker run -it -p 8000:8000 dockerized_site的输出:

Starting Gunicorn.
[2017-06-07 00:38:56 +0000] [1] [INFO] Starting gunicorn 19.6.0
[2017-06-07 00:38:56 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2017-06-07 00:38:56 +0000] [1] [INFO] Using worker: sync
[2017-06-07 00:38:56 +0000] [9] [INFO] Booting worker with pid: 9
[2017-06-07 00:38:56 +0000] [10] [INFO] Booting worker with pid: 10
[2017-06-07 00:38:56 +0000] [11] [INFO] Booting worker with pid: 11
Not Found: /js/bootstrap.min.js
Not Found: /js/jquery.js
Not Found: /js/bootstrap.min.js
Not Found: /favicon.ico

我将静态文件 url 模式附加到 urls.py,我很确定这与容器构建有关,或者可能与 settings.py 有关。也许我需要为静态文件添加一个环境目录?当然,我们非常感谢任何帮助。

【问题讨论】:

  • 能否请您发布 gunicorn 引发的错误?

标签: python django docker dockerfile gunicorn


【解决方案1】:

这是你的问题:

您的css 工作正常:

<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">

您的 js 不起作用 (404):

<script src="{% static '/js/jquery.js' %}"></script>

看到区别了吗?

/js 路径中的前导/

这解决了您的问题:

<script src="{% static 'js/jquery.js' %}"></script>

我克隆了你的 repo 并修复了模板,我已经解决了你的问题。请修复其他&lt;script&gt;s

【讨论】:

  • 再次感谢!我已经更正它并推送到大师。
【解决方案2】:

https://docs.djangoproject.com/en/1.11/howto/static-files/deployment/ 用于静态文件部署。

但您可能希望使用 Nginx 或 Apache 等 Web 服务器来提供静态文件。您不应该使用 Gunicorn 来提供静态文件,尤其是在生产环境中。 Gunicorn 是为动态内容制作的 WSGI 服务器。

【讨论】:

  • 在这种情况下,静态文件部署到将应用程序 docker 化。我最终会使用 Nginx,我现在只是在测试。
猜你喜欢
  • 2021-06-20
  • 2021-11-16
  • 2019-02-12
  • 2016-06-01
  • 2018-02-10
  • 2018-08-29
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多