2013-11-03 36 views
0

我有在Google App Engine上运行的Zend Framework项目。一切都很正常,用的一两件事例外:在GAE dev模式下设置PHP环境变量(dev_appserver.py)

我不能设置环境变量来告诉Zend的,我在开发模式

任何想法是?

(我在Ubuntu使用PHP 5.4)


我已经试过

(很显然,我不想通过app.yaml中设置变量...我不能通过.htaccess来设置它,因为它没有被使用。我宁愿不必在我的代码中添加任何条件来设置变量,或者)

我正在使用PHPStorm(IDE),它GAE有一个很好的插件。它甚至在环境变量的项目配置中有一个选项 - 除非它不起作用。我设置在PHPStorm(编辑配置>谷歌应用程序引擎PHP>命令行>环境变量)的变量,但如果我做了

getenv() 
从代码

,它返回

boolean false 

为什么

我在这一切的目标是动态加载的开发配置我的项目,particuarly这样我就可以使用MySQL LoCall号码y,而不是在开发和测试应用程序时连接到CloudSQL。

+1

什么是错在app.yaml中设置它?其次,你可以看看env变量SERVER_SOFTWARE,它的值是“”Development/X.Y“,其中”X.Y“是运行时的版本。” –

+0

我在你的需求中缺少一些东西,为什么不是'-mysql_host MYSQL_HOST 正在运行的MySQL服务器的主机名用于模拟 Google Cloud SQL存储(默认:localhost)' 命令行选项足以让你使用本地开发mysql服务器? –

+0

如果我在app.yaml中设置它,那么每次部署时都必须更改文件。否则,我的生产环境将被配置为使用开发数据库设置。这在Zend Framework项目中很常见,其中通常在虚拟主机文件中设置此env var。总的来说,代码库永远不需要改变,但它的行为有所不同,具体取决于它所运行的环境。 –

回答

2

的解决方案,我有去的基础上,由@蒂姆 - 霍夫曼的评论是我/public/index.php文件的逻辑如下点点,放在APPLICATION_ENV常数之前的定义:

$env = getenv("SERVER_SOFTWARE"); 
if ($env !== false) { 
    if ((bool)preg_match("/development/", strtolower($env))) { 
     define("APPLICATION_ENV", "development"); 
    } 
} 

在发展模式,SERVER_SOFTWARE将返回字符串“发展/ XX”(版本号),并在生产,这将是“谷歌应用程序引擎/ XYZ”

+1

你们这可能是最好的方法 –