如何在Yii2中定义控制台应用程序的环境?在Web应用程序中,它很简单。您只需将自定义声明添加到Apache vhost配置中即可完成。例如:
虚拟主机配置:
import os
import sys
import signal
import subprocess
def sigterm_handler(_signo, _stack_frame):
# it raises SystemExit(0):
print 'go die'
sys.exit(0)
signal.signal(signal.SIGTERM, sigterm_handler)
try:
# os.system('python loop.py')
# use os.system won't work, it will even ignore the SIGTERM entirely for some reason
subprocess.call(['python', 'loop.py'])
except:
os.killpg(0, signal.SIGKILL)
Yii2条目:
SetEnv APPLICATION_ENV production
我有三种环境:开发,测试,生产。那么我该如何在控制台应用中设置合适的环境呢?因为每个环境都有特定的配置等。
我的应用程序基于基本的应用程序模板。
答案 0 :(得分:4)
几天前我遇到了同样的问题。 yii控制台应用程序无法从VirtualHost设置中读取环境变量。
我的解决方法是调用php_uname()
函数来获取运行PHP的完整操作系统名称,并使用它来区分我的环境。如果您的三个环境在三台不同的(虚拟)计算机上运行,您可以尝试这种方式。
答案 1 :(得分:2)
如果所有控制台应用的环境应始终相同,则最好在config/console.php
中进行设置。只需添加类似
defined('YII_ENV') or define('YII_ENV', 'console');
当不同机器的环境不同时,gethostname
和switch
- case
将代表设置环境的最简洁方式。
switch (gethostname()) {
case "machine1": define('YII_ENV', "console-test"); break;
// more case statements
default: define('YII_ENV', "console");
答案 2 :(得分:0)
您可以在环境中添加法律文件,例如yii.env
<?php
defined('YII_ENV') or define('YII_ENV', 'prod');
并在文件ii中添加:
if (is_file('yii.env')){
include 'yii.env';
}