前提・実現したいこと
CentOS:CentOS Linux release 7.6.1810 (Core)
Apache:Apache 2.4.41
MySQL:mysqld Ver 5.7.19 for Linux on x86_64 (MySQL Community Server (GPL))
PHP:PHP 7.4.3
Laravel:Framework 7.4.0
公開しているサーバの中に
本番環境とテスト環境を共存させています。
apache/htdocs
・main
・test
URLのポート番号によってアクセスする環境を判定しています。
aaa.jp → main
aaa.jp:8080 → test
本番環境とテスト環境用のDBを用意しており、
それぞれの環境の.envにて
接続するDBを設定しています。
発生している問題・エラーメッセージ
時々なのですが、
テスト環境を操作しているのにもかかわらず、
本番環境のDBに接続してしまう現象が発生します。
テスト環境にのみ存在するプログラムを
本番環境のDBで実行している状態です。
同じブラウザで
本番環境とテスト環境を操作している場合と、
外部環境からアクセス(アプリからAPIにアクセス)する場合に
稀に発生しているようです。
毎回ではありません。
こちらの原因と解決方法をご教授いただけないでしょうか。
該当のソースコード
テスト環境の設定ファイルを下記に記載します。
「本番:」と記載のある部分は本番環境の設定値です。
php
1 2.env 3 4APP_NAME=test 本番:main 5APP_ENV=local 本番:production 6APP_KEY=++++++ 本番:********* 7APP_DEBUG=true 8APP_URL=aaa.jp:8080/ 本番:aaa.jp/ 9 10LOG_CHANNEL=stack 11 12DB_CONNECTION=mysql 13DB_HOST=127.0.0.1 14DB_PORT=3306 15DB_DATABASE=testDB 本番:mainDB 16DB_USERNAME=user 17DB_PASSWORD=pass 18 19BROADCAST_DRIVER=log 20CACHE_DRIVER=file 21QUEUE_CONNECTION=sync 22SESSION_DRIVER=file 23SESSION_LIFETIME=600 24SESSION_COOKIE=test 本番:main 25 26REDIS_HOST=127.0.0.1 27REDIS_PASSWORD=null 28REDIS_PORT=6379 29 30MAIL_MAILER=smtp 31MAIL_HOST=smtp.mailtrap.io 32MAIL_PORT=2525 33MAIL_USERNAME=null 34MAIL_PASSWORD=null 35MAIL_ENCRYPTION=null 36MAIL_FROM_ADDRESS=null 37MAIL_FROM_NAME="${APP_NAME}" 38 39AWS_ACCESS_KEY_ID= 40AWS_SECRET_ACCESS_KEY= 41AWS_DEFAULT_REGION=us-east-1 42AWS_BUCKET= 43 44PUSHER_APP_ID= 45PUSHER_APP_KEY= 46PUSHER_APP_SECRET= 47PUSHER_APP_CLUSTER=mt1 48 49MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 50MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 51
php
1テスト環境 2 3test/config/app.php 4 5<?php 6 7return [ 8 9 'name' => env('APP_NAME', 'test'), 本番:main 10 11 'env' => env('APP_ENV', 'local'), 本番:production 12 13 'debug' => env('APP_DEBUG', true), 14 15 'url' => env('APP_URL', 'aaa.jp:8080/'), 本番:aaa.jp/ 16 17 'asset_url' => env('ASSET_URL', null), 18 19 'timezone' => 'Asia/Tokyo', 20 21 'locale' => 'ja', 22 23 'fallback_locale' => 'en', 24 25 'faker_locale' => 'en_US', 26 27 'key' => env('APP_KEY'), 28 29 'cipher' => 'AES-256-CBC', 30]; 31
php
1テスト環境 2 3test/config/databas.php 4 5return [ 6 7 'default' => env('DB_CONNECTION', 'mysql'), 8 9 'connections' => [ 10 11 'sqlite' => [ 12 'driver' => 'sqlite', 13 'url' => env('DATABASE_URL'), 14 'database' => env('DB_DATABASE', database_path('database.sqlite')), 15 'prefix' => '', 16 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), 17 ], 18 19 'mysql' => [ 20 'driver' => 'mysql', 21 'url' => env('DATABASE_URL'), 22 'host' => env('DB_HOST', '127.0.0.1'), 23 'port' => env('DB_PORT', '3306'), 24 'database' => env('DB_DATABASE', 'testDB'), 本番:mainDB 25 'username' => env('DB_USERNAME', 'user'), 26 'password' => env('DB_PASSWORD', 'pass'), 27 'unix_socket' => env('DB_SOCKET', ''), 28 'charset' => 'utf8mb4', 29 'collation' => 'utf8mb4_unicode_ci', 30 'prefix' => '', 31 'prefix_indexes' => true, 32 'strict' => true, 33 'engine' => null, 34 'options' => extension_loaded('pdo_mysql') ? array_filter([ 35 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), 36 ]) : [], 37 ], 38 39 ], 40 41 'migrations' => 'migrations', 42 43 'redis' => [ 44 45 'client' => env('REDIS_CLIENT', 'phpredis'), 46 47 'options' => [ 48 'cluster' => env('REDIS_CLUSTER', 'redis'), 49 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'test'), '_').'_database_'), 本番:env('APP_NAME', 'main') 50 ], 51 52 'default' => [ 53 'url' => env('REDIS_URL'), 54 'host' => env('REDIS_HOST', '127.0.0.1'), 55 'password' => env('REDIS_PASSWORD', null), 56 'port' => env('REDIS_PORT', 6379), 57 'database' => env('REDIS_DB', 0), 58 ], 59 60 'cache' => [ 61 'url' => env('REDIS_URL'), 62 'host' => env('REDIS_HOST', '127.0.0.1'), 63 'password' => env('REDIS_PASSWORD', null), 64 'port' => env('REDIS_PORT', 6379), 65 'database' => env('REDIS_CACHE_DB', 1), 66 ], 67 68 ], 69 70]; 71
php
1テスト環境 2 3test/config/session.php 4 5<?php 6 7return [ 8 9 'driver' => env('SESSION_DRIVER', 'file'), 10 11 'lifetime' => env('SESSION_LIFETIME', 600), 12 13 'expire_on_close' => true, 14 15 'encrypt' => false, 16 17 'files' => storage_path('framework/sessions'), 18 19 'connection' => env('SESSION_CONNECTION', null), 20 21 'table' => 'sessions', 22 23 'store' => env('SESSION_STORE', null), 24 25 'lottery' => [2, 100], 26 27 'cookie' => env( 28 'SESSION_COOKIE', 29 Str::slug(env('APP_NAME', 'test'), '_').'_session' 本番:env('APP_NAME', 'main') 30 ), 31 32 'path' => '/', 33 34 'domain' => env('SESSION_DOMAIN', null), 35 36 'secure' => env('SESSION_SECURE_COOKIE', false), 37 38 'http_only' => true, 39 40 'same_site' => null, 41 42]; 43 44
試したこと
.env
config/app.php
config/database.php
config/session.php
上記ファイルの設定値をテスト環境と本番環境で書き換えました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。