如何配置CodeIgniter自动检测开发机器和真机?

问题描述:

我正在从我的Windows笔记本电脑进行开发,但需要在我的共享Linux主机上测试我的开发。我把以下代替正常的$application_path = "application";线放在一起。如何配置CodeIgniter自动检测开发机器和真机?

$env['laptop']['ip'] = '127.0.0.1'; 
$env['laptop']['host'] = 'MATT-WINDOWS7'; 
$env['laptop']['path'] = 'private';

$env['mattpotts']['ip'] = '12.34.56.78'; $env['mattpotts']['host'] = 'my.webhost.com'; $env['mattpotts']['path'] = '../private/blah';

 $ip = $_SERVER['SERVER_ADDR']; 
$host = php_uname('n'); 
foreach($env as $e) 
    if($e['ip'] == $ip && $e['host'] == $host) 
    $application_folder = $e['path']; 
unset($env); 
if(!isset($application_folder)) 
    die('application folder not set');

...的正常工作,用于设置应用程序的路径,但现在我正在与需要为每个环境数据库配置的麻烦。

我可以使它与几个简单的ifs一起工作,但我想知道是否有最佳实践解决方案。

干杯

使用版本控制,如Subversion。将一个配置文件部署到您的测试环境中,并在您的开发环境中签出一个修改后的版本。只需告诉客户端不要提交这些配置更改,以免它们进入测试/生产环境。

这绝对是最佳实践方案:)

P.S.如果你不想设置一个Subversion服务器,总是有托管解决方案,如Beanstalk,如果你在Windows上,TortoiseSVN是一个光滑的客户端。

如果您不想设置颠覆,您可以始终通过查看SERVER_NAME来检测您正在访问的网站。在过去的一个CI的网站,我用我的config.php中的以下弄清楚开发与生产服务器:

if ($_SERVER['SERVER_NAME'] == 'www.mysite.com') { 
    $config['log_path'] = '/var/log/site/'; 
} else { 
    $config['log_path'] = '/var/log/dev_site/'; 
} 

你可以使用这个你需要的地方有根据环境的不同变量。这就是说像这样硬编码到你的代码并不总是最好的主意。

+0

是不是不安全通过域名查询?至少laravel框架这样说: http://laravel.com/docs/4.2/upgrade “出于安全原因,URL域可能不再用于检测您的应用程序环境。” 唯一奇怪的是,我只在laravel文档中找到这个,而不是在互联网上的其他地方迄今为止 – 2015-01-13 08:00:08

这里是一个干净的解决方案,在一个单一的代码库运行多个生产环境:

http://philsturgeon.co.uk/news/2009/01/How-to-Support-multiple-production-environments-in-CodeIgniter

+0

从使用Zend Framework转换后,设置环境对应用来说更重要,我真的需要一些简单但有效的喜欢这个。干杯。 – wheresrhys 2010-12-06 21:36:14

由于菲尔的解决方案不再能够访问,这里的另一个解决方案,将为您提供完全相同的解决方案。

这里的链接到Git的回购:https://github.com/jedkirby/ci-multi-environments这是模块的简要说明:http://jedkirby.com/blog/2012/11/codeigniter-multiple-development-environments