【发布时间】:2016-09-24 15:13:22
【问题描述】:
我正在开发一个 Django 应用程序,我想把它放到 DigitalOcean 上,这样我就可以将它展示给未来的远程用户。我对 django 和 python 很陌生,而且我一生中从未接触过 Web 应用程序的部署,所以我有点迷失了。
我在digitalocean中使用了django droplet的一键安装,它使用了nginx和gunicorn。我能够使用 ip 地址 (159.203.58.210) 在浏览器中加载应用程序,但问题是无法加载静态文件。
我用谷歌搜索了几天,但没有任何帮助。我猜这与不允许的权限或我没有在模板和 *.py 文件中正确编写静态文件有关。
我正在使用以下命令运行我的应用程序:
python manage.py runserver localhost:9000
我使用 sqlite3 作为数据库
我的完整代码在这里: https://github.com/gbastien1/carte-interactive
在服务器上,我的应用位于 /home/django/international (international 是我的网站名称,该应用程序称为 carte_interactive)
我在 settings.py 中的静态文件设置:
STATIC_URL = '/static/'
STATIC_ROOT= '/home/django/international/carte_interactive/static'
我在 /etc/nginx/sites-enabled/django.conf 中的静态文件设置(媒体相同)
location /static {
alias /home/django/international/carte_interactive/static;
}
在我的模板中,我使用 {% load staticfiles %}
我这样称呼我的静态文件:
{% static 'carte_interactive/css/style.css' %}
而在我的 .py 文件中,我有时会这样称呼那些文件,我不知道它是否正确:
app_name='carte_interactive'
json_data_url = static('carte_interactive/json/data.json')
json_data_file = open(app_name + json_data_url, 'w') <-- here
这是唯一可以在开发中访问我在views.py 中的静态文件的解决方案,但它可能是在生产中使用collectstatic 的问题,我不知道。
我似乎在服务器上使用 django 1.9.4,在开发中使用 1.9.1。
您知道为什么我的静态文件在服务器上找不到 404 但在开发中一切正常吗?
文件夹 /home/django/... 是否存在权限问题,无法让浏览器访问我的静态文件?
有没有更好的方法在 views.py 中调用我的静态文件?
提前致谢!
编辑: 我为所有模板静态文件得到的控制台错误:
http://159.203.58.210/static/carte_interactive/css/style.css 失败 加载资源:服务器响应状态为 404(未找到)
【问题讨论】:
-
我不明白manage.py runserver的相关性。那只是为了开发;我希望你没有在 DigitalOcean 上使用它。
-
我想要的只是让我的应用程序可以在线使用,所以是的,我在 digitalocean 上使用 runserver 并且它可以工作。唯一的问题是静态文件。稍后我将负责使用 gunicorn 或其他东西进行实际生产。
-
是 nginx 给你 404 错误吗?我通常在我的 nginx 配置中的所有目录名称和别名中使用斜杠。不过,我真的不知道这是否有什么不同。
-
我假设你在开发中不使用 nginx 来服务静态资产? Runserver 可以提供静态文件,但比 nginx 慢得多,一旦您一次有多个网站访问者,这就会成为一个问题。您可以删除静态的nginx别名并重新加载nginx以让runserver服务文件,以确认它是否是nginx配置中的问题。
-
我在 django.conf 中注释掉了 location /static { ... } 块并且没有改变。那是否确保文件是由 runserver 提供的,还是有其他方法?而且,控制台给我的错误是:
http://159.203.58.210/static/carte_interactive/css/style.css Failed to load resource: the server responded with a status of 404 (Not Found)
标签: python django nginx django-staticfiles