Laravel本番環境が local 設定で動いていて焦った話
本番環境での composer コマンドに注意
10分程本番環境を止めてしまった。とはいえ普段はSlackの通知ばかりでサイト本体は人がほとんど見てないのでたぶんセーフだ。(本当か?)
まず結論
本番環境の composer install では 以下のオプションを付けないと、 dev環境の dusk 等も本番にインストールされてしまうケースがあるかもしれない。最悪動作しなくなるので注意。(envの設定によっては不要かもしれないが未検証)
Exception: It is unsafe to run Dusk in production. · Issue #289 · laravel/dusk · GitHub
composer install --no-dev
そもそも論
これまで本番環境の .env
の APP_ENV の設定値が local
のままだった、これのせいで composer install
でlocal環境での phpunitや諸々が本番環境にも入ってしまっていたようだ。
従ってまず .env
の 値を以下の様に書き換えた
本番before
APP_ENV=local
本番after
APP_ENV=production
ここが最初から production
に設定してあれば、そもそも今回の問題は起こっていないかもしれない。
.env
を書き換えた後にconfig:clear
の際に出たerror
$ php artisan config:clear In DuskServiceProvider.php line 43: It is unsafe to run Dusk in production.
これ、たしかローカル環境でも散々悩んだ DuskがLaravel5.6 ではにっちもさっちも行かなくなった際のerrorで、vendor の dusk内のメソッドで返り値の型宣言しないとerrorになる関係の奴だったと思う。
で、この後composer update
をやったら以下の様な error が出た
#色々あって最後の方 - Installing composer/semver (1.5.1): Downloading (100%) - Installing composer/ca-bundle (1.2.6): Downloading (100%) - Installing composer/composer (1.10.1): Downloading (100%) - Installing barryvdh/reflection-docblock (v2.0.6): Downloading (100%) - Installing barryvdh/laravel-ide-helper (v2.6.7): Downloading (100%) symfony/event-dispatcher-contracts suggests installing psr/event-dispatcher symfony/service-contracts suggests installing symfony/service-implementation barryvdh/reflection-docblock suggests installing dflydev/markdown (~1.0) Package facebook/webdriver is abandoned, you should avoid using it. Use php-webdriver/webdriver instead. Writing lock file Generating optimized autoload files Carbon 1 is deprecated, see how to migrate to Carbon 2. https://carbon.nesbot.com/docs/#api-carbon-2 You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it. > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover In DuskServiceProvider.php line 43: It is unsafe to run Dusk in production. Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1
dump-autoload でも同じこと言われる これでも本番は動かない(5分位経って焦っている)
$ composer dump-autoload Generating optimized autoload files Carbon 1 is deprecated, see how to migrate to Carbon 2. https://carbon.nesbot.com/docs/#api-carbon-2 You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it. > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover In DuskServiceProvider.php line 43: It is unsafe to run Dusk in production. Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1
そこでerror文言でググり冒頭にも張った以下のページに辿り着く
Exception: It is unsafe to run Dusk in production. · Issue #289 · laravel/dusk · GitHub
記載されたコマンド打って本番環境に不要な Dusk含む余計なものをアンインストールできた。
$ composer install --no-dev Loading composer repositories with package information Installing dependencies from lock file Package operations: 0 installs, 0 updates, 34 removals # 色々削除される(割愛) - Removing webmozart/assert (1.7.0) - Removing phpunit/phpunit (7.5.20) - Removing laravel/dusk (v4.0.5) Generating optimized autoload files Carbon 1 is deprecated, see how to migrate to Carbon 2. https://carbon.nesbot.com/docs/#api-carbon-2 You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it. > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: barryvdh/laravel-cors Discovered Package: barryvdh/laravel-debugbar Discovered Package: barryvdh/laravel-ide-helper Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Package manifest generated successfully.
むしろ今までlocal環境の設定のままで良く動いていたな、と思う。 万一間違ってtestコマンド打っていたらDBが死んでいた。 ちなみに上に出てる Carbon の新しい奴がどうした、とかいう奴は、前に古いバージョンじゃないと駄目な依存パッケージがあったかもで、そのままにしている。