Yii2定义控制台应用程序的环境

时间:2015-12-01 12:14:52

标签: php yii2 yii2-basic-app

如何在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

我有三种环境:开发,测试,生产。那么我该如何在控制台应用中设置合适的环境呢?因为每个环境都有特定的配置等。

我的应用程序基于基本的应用程序模板。

3 个答案:

答案 0 :(得分:4)

几天前我遇到了同样的问题。 yii控制台应用程序无法从VirtualHost设置中读取环境变量。

我的解决方法是调用php_uname()函数来获取运行PHP的完整操作系统名称,并使用它来区分我的环境。如果您的三个环境在三台不同的(虚拟)计算机上运行,​​您可以尝试这种方式。

php_uname doc

答案 1 :(得分:2)

如果所有控制台应用的环境应始终相同,则最好在config/console.php中进行设置。只需添加类似

的内容
defined('YII_ENV') or define('YII_ENV', 'console');

当不同机器的环境不同时,gethostnameswitch - 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';
}