现在我正在研究Django项目,这是我第一次通过gunicorn在服务器(Lighttpd)上运行Django应用程序。问题是 - 我用这样的gunicorn运行应用程序:
$PYTHON $MANAGEPATH run_gunicorn -D -b 127.0.0.1:18002 -p $GUNICORN_PIDPATH --log-file $GUNICORN_LOGPATH
Django settings.py的一部分:
from __future__ import absolute_import
import os
from socket import gethostname
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
HOSTNAME = gethostname()
def make_path(path):
return os.path.join(BASE_DIR, path)
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = make_path('static_root')
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'
在/etc/lighttpd/vhost.d/my_conf.conf中我对非静态文件有很好的重定向:
$SERVER["socket"] == ":82" {
server.document-root = "/home/mefioo/public_html/generator/static"
$HTTP["url"] !~ "\.(js|css|gif|jpg|png|ico|txt|swf|html|htm|svg|xlsx)$" {
proxy.server = ("" => ( "localhost" => (
"host" => "127.0.0.1",
"port" => 18002,
"fix-redirects" => 1
) ) )
}
}
Idea - .js或.css等静态文件位于
中/home/mefioo/public_html/generator/static
(这是Django app中static_root dir的代理),应该可以从url中获得
my_domain.com:82/my_file.js
应用程序的其余部分,所有网址都是这样的:
my_domain.com:82/url
应该像这样寻找django应用程序:
127.0.0.1:18002/url
因为lighttpd conf。
问题是 - 当我尝试访问我的静态文件时,我得到了404,因为app正在寻找
localhost:8080/my_file.js
而不是
my_domain.com:82/my_file.js
我不明白为什么,特别是当我有两个应用程序实例时,一个在我自己的服务器上(第二台PC,没有工作),一个在外部VPS上(按预期工作)。我是用错误的方式运行gunicorn,还是在lighttpd设置中丢失了一些东西?
答案 0 :(得分:0)
我也是django / gunicorn的新手,但这是我配置我的应用程序的方式:
settings.py中的设置
STATIC_ROOT = "/path to static files"
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
我没有使用lighttpd而是使用nginx,这是配置:
server{
server_name example.com www.example.com;
access_log off;
location /static {
autoindex on;
alias /path_to_static_files;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
之后我们必须收集配置目录中的静态文件。这可以通过以下方式完成:python3 manage.py collectstatic
所有文件都应该复制到正确的目录中,lightppd或者nginx可以为它们提供服务,而gunicorn可以使用django / python - part