appengine_config.py
文件是一个配置文件,可让您指定库的安装文件夹,以及为 google.appengine 软件包中的某些 Python 模块的常量和“钩子函数”提供您自己的值。如果您指定自己的值,则可以根据应用的需要更改相关 App Engine 服务的默认行为。您可以定义此文件和 app.yaml
配置文件,并将其与应用的其余代码一起部署。
使用 appengine_config.py 配置 Python 模块
App Engine 中的一些 Python 模块可以使用 appengine_config.py
进行配置。
如需自定义服务的 Python 模块,您可以在该服务的根目录中创建一个新的 appengine_config.py
文件。如需使用此文件,您只需定义您想要替换的常量或钩子函数。然后,从 app.yaml
文件所在的目录运行 gcloud app
deploy
,以重新部署应用以及新的 appengine_config.py
文件。您定义的常量和钩子函数随后将供这些 App Engine 服务在内部使用。
如需替换常量,请在常量名称前加上 Python 模块名称和下划线,然后为其分配一个值。例如,如需修改 AppStats 中的替换值,您可以定义 KEY_PREFIX
的值:
appstats_KEY_PREFIX = '__my_custom_prefix__'
所替换钩子函数的命名方式类似于其他 Python 模块中的函数。例如,在
namespace_manager 中,您可以按如下方式替换 appengine_config.py
中的钩子函数 default_namespace_for_request
:
import os def namespace_manager_default_namespace_for_request(): return os.environ.get('HTTP_HOST', '')
App Engine 中的可配置 Python 模块
下面列出的 Python 模块可以使用 appengine_config.py
进行配置。按照惯例,钩子函数使用小写字母,而常量使用大写字母:
-
default_namespace_for_request()
(默认返回None
)
- 请参阅 appengine/ext/appstats/recording.py 中的
class ConfigDefaults
- 请参阅 appengine/ext/appstats/sample_appengine_config.py 中的示例
BASE_PATH
(默认值为'/_ah/datastore_admin'
)MAPREDUCE_PATH
(默认值为'/_ah/mapreduce'
)CLEANUP_MAPREDUCE_STATE
(默认值为True
)
CUSTOM_ENVIRONMENT_AUTHENTICATION
- 请参阅 appengine/ext/remote_api/handler.py 中的
class ConfigDefaults
使用 lib_config 配置您自己的 Python 模块
App Engine 还允许您使用 appengine_config.py
中定义的常量和钩子函数来配置您自己的 Python 模块。lib_config.register()
函数允许您注册用户可替换的常量和钩子函数的名称,并定义合理的默认值,这样,当用户不希望进行替换时,就可以使用这些值。在内部,lib_config.register()
会尝试导入 appengine_config
。如果导入成功,则会将指定的 Python 模块的默认值替换为 appengine_config.py
中定义的那些值。
my_module.py
中的示例用法:
from google.appengine.api import lib_config def _hook_function1_default(): return 'baz' _config = lib_config.register('my_module', {'CONSTANT1': 'foo', 'CONSTANT2': 'bar', 'hook_function1': _hook_function1_default})
现在,您可以通过以下方式访问用户的常量:
_config.CONSTANT1 _config.CONSTANT2
以及通过以下方式调用其钩子函数:
_config.hook_function1()
一些程序员喜欢将这些默认值分组到一个类中:
class _ConfigDefaults(object): CONSTANT1 = 'foo' CONSTANT2 = 'bar' def hook_function1(): return 'baz' _config = lib_config.register('my_module', _ConfigDefaults.__dict__)
用户可以在 appengine_config.py
中进行定义以替换默认值:
my_module_CONSTANT1 = 'foofoo' my_module_hook_function1 = lambda: 'bazbaz'
因此,在 my_module.py
中,实际情形如下:
_config.CONSTANT1
现为'foofoo'
_config.CONSTANT2
仍然为'bar'
_config.hook_function1()
返回'bazbaz'
在 lib_config.register()
返回后,用户替换值可立即供 my_module.py
使用。