作りたいものがありすぎる

40歳を過ぎてプログラミングを始めた人の顛末とこれからなど

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