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

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

新規登録して質問してみよう
ただいま回答率
85.46%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1526閲覧

別のディレクトリの.envが読み込まれてしまう

kadomi

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/06/10 01:11

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/06/10 01:18

apacheのvirtualhostの設定に失敗しているだけでは?
FKM

2021/06/10 05:21

本番環境もポート番号が8080になってるのでは?
guest

回答1

0

上で追記して頂いている通り、Apache設定がポート番号が原因かもしれません。
個人的には、本番 <-> 検証環境を渡ってアクセスすることで、
検証環境のenvファイルがカッシュに残された状態で、本番にアクセスしているような気がします。
(ありえないと思いますけど…)

対策としては、

  1. config系のファイルを環境ごとに分けて管理しているようですので、

envは記載せず値だけ入れることです。

php

1テスト環境 2 3test/config/database.php 4 5return [ 67 'mysql' => [ 89 'database' => 'testDB', // envを削除、本番:mainDB 1011 ],
  1. 本番環境で、検証環境の.envファイルをロードされた場合はカッシュクリアを行うことです。

php

1本番環境 2 3main/app/Providers/AppServiceProvider.php 4 5use Artisan; 6 7public function boot() 8 { 9 if (env('APP_NAME') === "test") { 10 // .envの変数をリロードする 11 Artisan::call('config:cache'); 12 } 13 }

で解消できるのかもしれません。

環境ごとにファイルを分けるのはあまりお勧めできないのですが、
原因が判明できるまではこれで対応した方が良さそうですね。

投稿2021/06/13 10:36

SSW

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問