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 の新しい奴がどうした、とかいう奴は、前に古いバージョンじゃないと駄目な依存パッケージがあったかもで、そのままにしている。