PHP CLI 可用的 OpsWorks 环境变量

PHP CLI 可用的 OpsWorks 环境变量

我们正在使用 OpsWorks 将基于 Laravel 的应用程序部署到 AWS。我们已通过 OpsWorks 控制台定义了环境变量,Apache 可以正确查看这些变量。但是,在运行 CLI 任务(例如artisan命令)时,这些变量未设置。

我理解这是由于在 Apache 的虚拟主机配置文件中设置了环境变量。我以为我可以通过运行一个部署钩子来解决这个问题,这个钩子会回显这些变量并将它们附加到/etc/environment,但这并不奏效(即使它奏效了,它也太弱了)。

还有其他方法可以实现这一点吗? OpsWorks 允许这个特定要求吗?

谢谢。

答案1

以下是我们解决这个问题的方法(虽然不是最理想的,但还是可以的):

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

我们主要使用上述内容从部署队列中的第一个实例运行迁移。

答案2

如果您还使用自定义 Chef 食谱,则可以使用 Chef 模板在运行时从 JSON 或 OpsWorks 应用程序变量设置属性。以下是 Moodle 设置的 config.php 示例,假设您有一个名为 webapp 的应用程序,其中配置了 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/';

相关内容