我为基于CodeIgniter的站点提供了本地,登台和生产环境。我越来越多地发现每次部署版本时,由于服务器的不同,我会有越来越多的代码需要更改。
我可以添加一个好的(和快速)解决方案,这将允许我通过仅使用一个设置来设置这些变量。哪个是在index.php中插入它的最佳位置,某种钩子?
答案 0 :(得分:6)
如果您正在使用Apache,则可以设置一个环境变量,该变量可由PHP在该站点的虚拟主机文件中读取:
<VirtualHost *:80>
DocumentRoot /path/to/site
ServerName local.mysite.com
ErrorLog /path/to/error_log
CustomLog /path/to/access_log common
<Directory /path/to/site>
SetEnv ENVIRONMENT local
RewriteEngine On
Options FollowSymLinks Indexes
AllowOverride AuthConfig Options FileInfo
</Directory>
</VirtualHost>
因此,您现在可以在index.php文件中相应地检查并设置服务器环境:
// always default to production for safety
$environment = 'production';
// check for an environment override
if (function_exists('apache_getenv') && apache_getenv("ENVIRONMENT")) {
$environment = apache_getenv("ENVIRONMENT");
} else if (getenv("ENVIRONMENT")) {
$environment = getenv("ENVIRONMENT");
}
// set the environment constant
define('ENVIRONMENT', $environment);
通过此设置,您现在可以自由地部署站点并为每个环境的application/config/[file].php
文件添加其他配置参数。
处理多环境设置的另一种可能性是在文档根目录之外创建一个文件,并被包含服务器环境值的版本控制系统(即.gitignore)忽略。然后,您可以通过file_get_contents()
或同等文件读取该文件。
答案 1 :(得分:2)
定义一个“LIVE”常量,该常量基于当前域(或将其放在index.php文件中)为TRUE或FALSE
if(strpos($_SERVER['HTTP_HOST'], 'mylivesite.com'))
{
define('LIVE', TRUE);
}
else
{
define('LIVE', FALSE);
}
然后检查您是否在线并相应地分配变量
if(LIVE)
{
$active_group = "production";
}
else
{
$active_group = "test";
}
我在过去一年的5环境设置中一直这样做,没有问题
答案 2 :(得分:2)
一个老问题,但Codeigniter Reactor支持现在内置的环境变量。您只需打开index.php文件并选择您的环境。这里有一篇关于他们的帖子:http://ilikekillnerds.com/2011/03/how-to-use-codeigniter-reactor-environment-variables/
答案 3 :(得分:1)
官方CodeIgniter doc建议多个数据库环境:
config.php文件中的Gobal变量来设置环境:
$ active_group =“test”;
database.php中的多个设置
$db['test']['hostname'] = "localhost";
$db['test']['username'] = "root";
$db['test']['password'] = "";
$db['test']['database'] = "database_name";
...
$db['production']['hostname'] = "example.com";
$db['production']['username'] = "root";
$db['production']['password'] = "";
$db['production']['database'] = "database_name";
...
有关详细信息,请参阅文档。
答案 4 :(得分:1)
由于服务器的变化而导致许多代码变化,这是一个不好的迹象,表明您正在修改不应该为应用程序修改的代码。您应该在服务器之间更改的唯一事项是位于config.php
中的配置变量,它应具有默认值,供开发人员根据环境进行更改。