web-dev-qa-db-ja.com

OpsWorks環境変数はPHP CLI

OpsWorksを使用してLaravelベースのアプリケーションをAWSにデプロイしています。 OpsWorksコンソールを介して環境変数を定義しました。これらはApacheによって正しく表示されます。ただし、artisanコマンドなどのCLIタスクを実行する場合、それらは設定されません。

これは、Apacheの仮想ホスト構成ファイルに設定されている環境変数が原因であると理解しています。これらの変数をエコーし​​て/etc/environmentに追加するデプロイフックを実行することで問題を修正できると思いましたが、これは機能しません(機能したとしても、信じられないほど弱いでしょう)。

これを達成する他の方法はありますか? OpsWorksはこの特定の要件を許可しますか?

ありがとう。

1
cafonso

これをどのように解決したかを次に示します(理想的ではありませんが、うまくいきます)。

  • getenv()を使用してすべての環境変数にアクセスします。$_ENVを使用している場合、Apacheはそれらを認識しません。
  • OpsWorksデプロイフックを使用して、すべての環境変数を.env.php(本番環境用のLaravelの構成ファイル)に書き込みます。環境変数は、node[:deploy]['<short_app_name>'][:environment_variables][:<VAR_NAME>]を介してデプロイフックコードで使用できます。
  • 実稼働環境を指定する職人コマンドを実行します:php artisan --env=production --force <command-to-be-run>

主に上記を使用して、デプロイメントキューの最初のインスタンスから移行を実行します。

1
cafonso

カスタムChefクックブックも使用している場合は、実行時にChefテンプレートを使用してJSONまたはOpsWorksアプリケーション変数からプロパティを設定できます。以下は、Moodleセットアップのconfig.phpの例であり、moodle_dbhost、moodle_dbname、moodle_dbuserなどの属性が構成されたwebappというアプリケーションがあることを前提としています。

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/';
0
J. Lawson