几个小时试图解决使用达芙妮时加载环境变量的问题
在此之前,我在使用Gunicorn时使用了几乎相同的配置,并且一切正常。
最初我尝试在配置中做同样的事情gunicorn:EnvironmentFile=/var/www/gglobal/.envvars,但是我得到了这样的错误:
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,542 DEBUG get 'RDS_HOSTNAME' casted as 'None' with default '<NoValue>'
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,543 DEBUG get 'RDS_PORT' casted as 'None' with default '<NoValue>'
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,543 DEBUG get 'REDIS_ENDPOINT_ADDRESS' casted as 'None' with default '<NoValue>'
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,543 DEBUG get 'REDIS_PORT' casted as 'None' with default '<NoValue>'
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,544 DEBUG get 'DJANGO_SENTRY_DSN' casted as 'None' with default 'https://56bb387ee6ef4e7b
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,544 DEBUG get 'DJANGO_SENTRY_CLIENT' casted as 'None' with default 'raven.contrib.django.
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,544 DEBUG get 'DJANGO_SENTRY_LOG_LEVEL' casted as '<class 'int'>' with default '20'
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,544 DEBUG get 'DJANGO_SENTRY_LOG_LEVEL' casted as '<class 'int'>' with default '20'
Jun 26 17:37:47 p435061.kvmvps daphne[14073]: 2017-06-26 17:37:47,545 DEBUG get 'DJANGO_ADMIN_URL' casted as 'None' with default '<NoValue>'
但是有了这一切,服务就开始了!
并且 nginx 错误日志发誓该*.sock文件丢失:
2017/06/26 17:47:51 [crit] 12682#12682: *59 connect() to unix:/var/www/project/project.sock failed (2: No such file or directory) while connecting to upstream, client: 5.152.1.201, server: mydomain.com, request: "GET / HTTP/2.0", upstream: "http://unix:/var/www/project/project.sock:/", host: "mydomain.com"
使用下面的选项,我得到一个稍微不同的错误:
django.core.exceptions.ImproperlyConfigured:设置 DJANGO_SECRET_KEY 环境变量
然后我决定尝试编写一个小的 bash 脚本来显式导出变量:
while IFS='' read -r line || [[ -n "$line" ]]; do
export $line
echo exporting $line
done < "$1"
并在使用之前运行此脚本ExecStartPre,但它也不起作用。更准确地说,结果与前一种情况相同,它发誓要使用未导出的DJANGO_SECRET_KEY.
这里daphne.service:
[Unit]
Description=daphne daemon
After=network.target
[Service]
ExecStartPre=-bash /tmp/env.sh /var/www/project/.envvars
Environment=DJANGO_SETTINGS_MODULE=config.settings.production
User=project
Group=www-data
WorkingDirectory=/var/www/project
ExecStart=/var/www/venv/bin/daphne -b unix:/var/www/project/project.sock config.asgi:channel_layer -v2
[Install]
WantedBy=multi-user.target
在这里gunicorn.service:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
EnvironmentFile=/var/www/project/.envvars
User=project
Group=www-data
WorkingDirectory=/var/www/project
ExecStart=/var/www/venv/bin/gunicorn --workers 3 --bind unix:/var/www/project/project.sock config.wsgi:application --env DJANGO_SETTINGS_MODULE='config.settings.production'
[Install]
WantedBy=multi-user.target
现在它们不同了,你可以说“做和那个有效的一样”,但它不是那样工作的,这就是为什么我试图做所有的事情,包括打字。
我真的不明白问题是什么。
谁有什么想法?
这是工作配置:
要在套接字上成功运行
unix,您只需指定路径,不带前缀unix:,就像在配置中一样gunicorn