0

aws opsworks に Laravel アプリケーションをデプロイしています。すべて問題なく動作していますが、他に 2 つのことを行う必要があります。

1) 各デプロイメントでphp artisan migrate、データベースの更新をインストールするために実行します。
2) 実行したいファイルの各行に、クラス名のリストを含むファイル (app/database/run.list) がありますphp artisan db:seed --class={line from file}。例えば

run.list を含む

NewSystemSeed
NewUserSeed
CreateDefaultTemplatesSeed

私たちは走りたい

php artisan db:seed --class=NewSystemSeed
php artisan db:seed --class=NewUserSeed
php artisan db:seed --class=CreateDefaultTemplatesSeed

その部分はそれほど難しいものではありません (私は最後の部分で少し立ち往生していますが)。私が立ち往生している部分は、特定のレイヤー (php-app レイヤー) の最初のインスタンスでのみこれを実行したいということです。

明らかに、すべてのインスタンスに対してデータベースをシードする必要はありません。

これを自動化する方法はありますか、それとも別のレシピを作成し、デプロイ後にインスタンスでこのレシピを手動でトリガーする必要がありますか?

4

2 に答える 2

0

レイヤを OpsWorks のタグとして使用して、レシピを通知できます。

新しいレイヤーを作成します (おそらく「db-seeder」)。そのレイヤーに新しいインスタンスを追加する代わりに、PHP レイヤーから既存のインスタンスを追加します。

次のような新しいカスタム レシピを作成します。

if node[:opsworks][:instance][:layers].include?("db-seeder")
  config_file = 'app/database/run.list'
  bash "migrate db" do
    code %Q^
      php artisan migrate
      for clz in `cat #{config_file}` do;
        php artisan db::seed --class=${clz};
      done^
  end
end

上記のレシピは、「db-seeder」レイヤーにあるインスタンスでのみ動作します。このカスタム レシピを、PHP アプリ レイヤーの「デプロイ」イベントに追加します。

于 2014-10-27T11:03:28.627 に答える