首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python应用程序的uwsgi.ini配置

python应用程序的uwsgi.ini配置
EN

Server Fault用户
提问于 2012-07-26 07:57:37
回答 3查看 21.2K关注 0票数 7

所以我正在试验uWSGI,并且非常喜欢它。

不过,关于它的.ini文件的使用,我有一个问题。

是否可以动态计算其.ini配置参数的值?

例如,对于"uwsgi.ini“文件中的"chdir”值,我有

代码语言:javascript
运行
复制
[uwsgi]
socket=127.0.0.1:3034
chdir=/Users/calvin/work/myproject
virtualenv=/Users/calvin/.virtualenvs/myproject
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=myproject.settings
master=True
pidfile=/tmp/myproject-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/myproject.log

为我的“本地机器”、我的“开发/分期”服务器和我的“生产服务器”编写3个单独的.ini文件是很麻烦的。更不用说同事的本地机器的chdir值将完全不同。

我尝试使用import osos.join.path动态地计算chdir值,但是它不能工作,这是预期的,因为uwsgi没有python解释器?

EN

回答 3

Server Fault用户

回答已采纳

发布于 2012-07-26 09:06:27

我在浏览了一下uwsgi的文档后自己找到了答案。

引用,https://uwsgi-docs.readthedocs.io/en/latest/ConfigLogic.html,我们可以通过使用环境变量来指定配置逻辑和动态计算路径,而在python中。

因此,假设我目前处于myproject虚拟环境中,我的.ini配置将自动计算chdirvirtualenv .ini配置选项的路径,如下所示:

代码语言:javascript
运行
复制
[uwsgi]

if-env = PROJECT_HOME
print = Your path is %(_)/myproject
chdir = %(_)/myproject
endif =

if-env = VIRTUAL_ENV
print = Your virtualenv is %(_)
virtualenv = %(_)
endif = 

socket=127.0.0.1:3034
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=bbox.settings
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

当然,print语句是可选的,但是这为uwsgi二进制文件提供了它所期望的chdirvirtualenv的值。

就像这样:

代码语言:javascript
运行
复制
calvin$ uwsgi --ini myproject/uwsgi.ini 
[uWSGI] getting INI configuration from myproject/uwsgi.ini
Your path is /Users/calvin/work/myproject
Your virtualenv is /Users/calvin/.virtualenvs/myproject
*** Starting uWSGI 1.2.4 (64bit) on [Thu Jul 26 17:00:04 2012] ***
compiled with version: 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.61) on 25 July 2012 20:06:56
detected number of CPU cores: 8

当然,在最终的.ini文件中,打印语句是不必要的。我只是把它们放在那里,以便打印出必要的信息,从而确认我的路径是在.ini文件中动态计算的。

票数 9
EN

Server Fault用户

发布于 2015-09-02 21:42:26

我不确定用不同的配置文件运行开发和生产版本是一种很好的做法--这通常是一种解决“奇怪”问题的方法,因为开发版本中没有出现这些问题(因为不同的文件权限或其他原因)。更好的方法是像make install这样做,并且总是使用类似于生产的配置。或者,你可以把你的源代码链接到你的主页中的项目目录中去编辑它们。但是,您的配置也是独一无二的。

票数 1
EN

Server Fault用户

发布于 2017-04-24 16:41:37

在卡尔文给出的答案的基础上,使用“@”魔法可以在动态配置方面具有更大的灵活性。

例如,@(exec://...)可以用于计算bash命令。在我的例子中,它允许我定义:realpath = @(exec://bash -c 'dirname `readlink -f %p`'),这是我一直在寻找的,因为我已经从另一个目录中符号链接了这个配置。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/411361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档