質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

3回答

997閲覧

Laravel5.5 Consoleで --env=*** を実行したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/11/02 19:02

編集2018/11/02 19:12

composer.jsonやターミナル上で以下のようにして環境変数指定できますがバッチ内で環境変数指定する方法はないでしょうか?

php artisan ide-helper:generate --env=develop
class PostScriptsCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'post:cmd {argument : install or update}'; /** * The console command description. * * @var string */ protected $description = 'composer.json実行時にpost-update-cmdまたはpost-install-cmdで実行したい処理を実行する'; private $environment; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); $this->environment = \App::environment(); } /** * Execute the console command. * * @return mixed */ public function handle() { if (!isRequireDev()) { $this->error($this->environment . '環境では実行できません。'); return; } switch ($this->argument('argument')) { case 'install': $this->install(); break; case 'update': $this->update(); break; default: $this->error('php artisan post:cmd -h でプログラム実行条件を確認してください。'); } } /** * composer.jsonのpost-install-cmdディレクティブ内で実行したい処理を実行。 */ private function install() { $env = $this->argument('argument'); $this->info('post-' . $env . '-cmdを実行します。'); } /** * composer.jsonのpost-update-cmdディレクティブ内で実行したい処理を実行。 */ private function update() { $argument = $this->argument('argument'); $this->info('post-' . $argument . '-cmdを実行します。'); $this->call('ide-helper:generate'); // $this->call('ide-helper:meta --env=local'); // 認識されない、、、 // $this->call('ide-helper:generate --env=' . $env); // $this->call('ide-helper:meta--env=' . $env); } }

ide-helperはrequire-devに設定していて、本番環境では読み込まないようにしているので
composer installやupdate実行時に、--env=***で実行しないと以下のエラーがでてしまいます。

> php artisan ide-helper:generate Exception: No application encryption key has been specified. Skipping \Illuminate\Support\Facades\Crypt. Exception: Database [user_server] not configured. Skipping \Illuminate\Support\Facades\Schema. Exception: No application encryption key has been specified. Skipping \Illuminate\Support\Facades\Crypt. Exception: Database [user_server] not configured. Skipping \Illuminate\Support\Facades\Schema.

AppServiceProviderでenvがlocalとdevelopのみ、require-devを読み込むようにしています。

/* |-------------------------------------------------------------------------- | 開発環境と検証環境のみ必要パッケージ等を読み込む。composer.jsonのrequire-devに依存する。 | require-devで導入するパッケージ等はconfig/xxx/app.phpへ追記して読み込む。 |-------------------------------------------------------------------------- */ if (isRequireDev()) { $providers = config(\App::environment() . '.app.providers', []); foreach ($providers as $index => $provider) { if (class_exists($provider)) { $this->app->register($provider); } } $aliases = config('develop.app.aliases', []); foreach ($aliases as $alias => $facade) { if (class_exists($facade)) { $this->app->alias($alias, $facade ); } } }
function isRequireDev() { return in_array(\App::environment(), ['local', 'develop']); }

つまり、--env=localか--env=developを付与してphp artisan ide-helper:generateを実行しないとそんなクラスないってことでエラーがでます。

これを回避する良い方法は何かないでしょうか?

composer.jsonのpost-update-cmdで冒頭のConsoleを読み込んでいます。

"post-update-cmd": [ "php artisan post:cmd update", "php artisan optimize" ]

jsonの中でenvを取得できればいいのですが、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

単純にexec関数で解決。

"post-update-cmd": [ "php artisan post:cmd update", "php artisan optimize" ]
private function update() { $argument = $this->argument('argument'); $this->info('post-' . $argument . '-cmdを実行します。'); // $this->call('ide-helper:meta --env=local'); // これはNG exec('php artisan ide-helper:generate --env=' . $this->environment); }

.envだけ用意していれば$this->call('ide-helper:meta')などでも問題ないが、今回

.env.xxxx
.env.yyyy
.env.zzzz

のような環境に応じたenvファイルを用意していたため、artisanコマンドを実行する際には--env=xxxxなどと付与して実行しないとenvファイルを読み込めないため、エラーがでていた。

そもそも論として、手動でphp artisan ide-helper:generate --env=localなどとするのが面倒なのと開発者の知見度に依存することなく開発効率をあげたいことから、composer pudateさえ実行すればpost-update-cmdで必要な処理をまとめて全部任せられるような仕組みを作りたかった。

しかし、composer.jsonでは現在の環境変数を取得できないので、更にcomsoleを呼び出し、そこで現在の環境変数を取得し、必要なartisanコマンドを実行するようにした。

投稿2018/11/03 07:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそもpost-update-cmdで実行する必要がない。
ide-helperのREADMEには書いてあるけど別に毎回自動で実行しないといけない理由はないので必要な時に手動でやればいいだけのこと。

自分の場合はpackage.jsonに書いてる。PhpStormはnpm scriptのほうがすぐに実行できるから。

"scripts": { ... "ide-helper:meta": "php artisan ide-helper:meta", "ide-helper:generate": "php artisan ide-helper:generate", "ide-helper:models": "php artisan ide-helper:models -N" },

投稿2018/11/03 02:33

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/03 05:51 編集

手動で実行するのはcomposer だけにしたいので、プログラム側で現在の環境を判断したいので `php artisan ide-helper:generate --env=****` を実行したいのです。 開発環境構築用のシェルをいづれ作るのでcomposer installやupdate自体もスクリプトで実行させる予定なので、やはりプログラム側でartisan実行できる方が良いです。 npm使えば良いですが、必ず使う保証はないので、そういった意味ではそちらかというとcmposer.jsonに記載しておきたいのです。
退会済みユーザー

退会済みユーザー

2018/11/03 06:03

composer.jsonのpost-update-cmdで実行していることが問題ではなく、consoleで実行して認識されないことが問題となっています。 composer.jsonのpost-update-cmd php artisan ide-helper:generate --env=develop これはOK。 composer.jsonのpost-update-cmdでconsole呼び出し $this->call('ide-helper:generate --env=develop'); これはNG。 $ composer update Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: barryvdh/laravel-debugbar Discovered Package: barryvdh/laravel-ide-helper Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: laravelcollective/html Discovered Package: nesbot/carbon Package manifest generated successfully. > php artisan post:cmd update post-update-cmdを実行します。 Command "ide-helper:generate --env=local" is not defined. Did you mean one of these? ide-helper:eloquent ide-helper:generate ide-helper:meta ide-helper:models Script php artisan post:cmd update handling the post-update-cmd event returned with error code 1
退会済みユーザー

退会済みユーザー

2018/11/03 06:03

なのでpackage.jsonで実行することが解決方法ではないのです。。。
guest

0

プロジェクトルートに「.env.local」なり「.env.develop」なりのファイルは存在していますでしょうか。
--envオプションは、名前に合わせて.envファイルを読み替えているにすぎません。

投稿2018/11/02 23:55

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/03 05:46

さすがにファイルは用意しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問