uWSGI构建系统¶
- 更新至1.9.13
本页面描述了uWSGI构建系统是如何工作的,以及如何对其进行定制。
uwsgiconfig.py¶
这是一个旨在调用不同编译/链接阶段的python脚本。
在2009年期间,当开始定义uWSGI指导方针 (以及准则) 时,人们一致认为,autotools, cmake和它们的小伙伴们不受许多系统管理员喜爱。尽管它们相当标准,但是需要包数量,以及它们之前的不兼容(特别是在autotools的世界中)对于一个具有快速开发/演进的项目来说,是个问题,其中“从源代码编译”曾经,现在是,并且可能将是从产品获得最好的最好的方式。除此之外,构建过程一定要快 (在入门级的x86上少于1分钟是主要规则)
出于这样的原因,要编译uWSGI,你只需要有一个c编译套件 (gcc, clang...) 和一个python解释器。有人可能会说,perl可能是一个更好的选择,也许这是事实 (默认情况下,许多操作系统一般都会安装它),但是我们还是决定主要用python,因为,在uWSGI项目启动的时候,它是一个仅支持python的应用。(显然,如果你想要开发一个可替换的构建系统,请随意)
基本上,uwsgiconfig.py检测系统中的可用特性,并使用所谓的“构建配置文件”构建一个uwsgi二进制(及其插件)
构建配置文件¶
第一个例子¶
CC和CPP¶
这2个环境变量告诉uwsgiconfig.py使用一个替换的C编译器和C预处理器。
如果不定义它们,那么过程如下:
对于CC -> 尝试从运行uwsgiconfig.py的python二进制中获得CC config_var,回退到’gcc’
对于CPP -> 回退到’cpp’
例如,在一个同时拥有gcc和clang的系统上,你会得到
CC=clang CPP=clang-cpp python uwsgiconfig.py --build
CPUCOUNT¶
在“即使在生产系统上,也要轻松快速构建”的精神下,uwsgiconfig.py试着使用你所有的cpu核来生成c编译器的多个实例 (每个核一个)。
你可以使用CPUCOUNT环境变量来覆盖这个系统,强制已检测的CPU核数目 (设为1将会禁用并行构建)。
CPUCOUNT=2 python uwsgiconfig.py --build
UWSGI_FORCE_REBUILD¶
插件和uwsgiplugin.py¶
一个uWSGI插件是一个导出<name>_plugin符号的共享库。其中,<name>是插件名。
例如,psgi插件将会导出psgi_plugin符号,而pypy将会导出pypy_plugin符号,以此类推。
这个符号是一个uwsgi_plugin C结构,定义插件的钩子。
当你让uWSGI加载一个插件的时候,它简单调用dlopen(),并通过dlsym()获得uwsgi_plugin结构。
uWSGI项目的绝大部分是作为插件开发的,这保证了配置的模块化,以及明显理智的发展方式。
系统管理员可以随意嵌入每个插件在服务器二进制文件中,或将每个插件当成一个外部共享库构建。
已嵌入的插件在构建配置文件的’embedded_plugins’指令中定义。你可以使用UWSGI_EMBED_PLUGINS环境变量,从命令行添加更多嵌入插件(见下)。
事实上,如果你想要把一个插件作为共享库构建,那么只需带–plugin选项运行uwsgiconfig.py
python uwsgiconfig.py --plugin plugins/psgi
这将会构建plugins/psgi中的插件为psgi_plugin.so文件
要在构建插件的时候,指定一个构建配置文件,你可以把这个配置文件当成一个额外的参数传递
python uwsgiconfig.py --plugin plugins/psgi mybuildprofile
UWSGI_INCLUDES¶
- 这个已在1.9.13添加
在启动时,运行CPP二进制文件来检测默认的包含路径。你可以使用UWSGI_INCLUDES环境变量来添加更多路径
UWSGI_INCLUDES=/usr/local/include,/opt/dev/include python uwsgiconfig.py --build
UWSGI_EMBED_PLUGINS¶
UWSGI_EMBED_CONFIG¶
允许嵌入指定的.ini文件到服务器二进制文件中 (目前仅支持Linux)
在启动的时候,服务器立即解析嵌入的文件。
嵌入的配置中自定义的选项将如标准选项一般可用。