OpsWorks环境variables可用于PHP CLI

我们正在使用OpsWorks将基于Laravel的应用程序部署到AWS。 我们已经通过OpsWorks控制台定义了环境variables,并且Apache可以正确地看到它们。 但是,在运行诸如artisan命令的CLI任务时,它们不会被设置。

我知道这是由于在Apache的虚拟主机configuration文件中设置了环境variables。 我想我可以通过运行一个能够回应这些variables的部署钩子来解决这个问题,并将它们附加到/etc/environment ,但是这种方式不起作用(即使这样做也是令人难以置信的)。

有没有其他办法可以做到这一点? OpsWorks是否允许这个特定的要求?

谢谢。

以下是我们如何解决这个问题(虽然不理想,但它的确有用):

  • 使用getenv()来访问所有的环境variables:如果使用$_ENV Apache将不会看到它们。
  • 使用OpsWorks部署钩子将所有环境variables写入.env.php ,生产环境的Laravelconfiguration文件。 环境variables将通过node[:deploy]['<short_app_name>'][:environment_variables][:<VAR_NAME>]用于部署挂钩代码。
  • 运行指定生产环境的artisan命令: php artisan --env=production --force <command-to-be-run>

我们主要使用上面的来运行部署队列上的第一个实例的迁移。

如果您还使用自定义的主厨食谱,则可以使用Chef模板在运行时从JSON或OpsWorks应用程序variables设置属性。 下面是一个Moodle设置的config.php示例,并假设你有一个名为webapp的应用程序,configuration了诸如moodle_dbhost,moodle_dbname,moodle_dbuser等属性。

 CFG->dbtype = 'pgsql'; $CFG->dblibrary = 'native'; $CFG->dbhost = '<%= node['deploy']['webapp']['environment']['moodle_dbhost'] %>'; $CFG->dbname = '<%= node['deploy']['webapp']['environment']['moodle_dbname'] %>'; $CFG->dbuser = '<%= node['deploy']['webapp']['environment']['moodle_dbuser'] %>'; $CFG->dbpass = '<%= node['deploy']['webapp']['environment']['moodle_dbpwd'] %>'; $CFG->prefix = 'mdl_'; $CFG->dboptions = array ( 'dbpersist' => 0, 'dbport' => '<%= node['deploy']['webapp']['environment']['moodle_dbport'] %>', 'dbsocket' => 0, ); $CFG->wwwroot = 'http://example.com/moodle/'; $CFG->dataroot = '/var/www/moodle-data/';