環境変数で開発環境か本番環境か判定して条件分岐するようにしたいです。
開発環境ではメール送信にmailhogを使っており、本番環境ではsendgridを使用予定です。
(sendgrid、取得したAPIキーからenvを編集。動作確認済み。)
どうすれば、環境変数で開発環境(mailhog)か本番環境(sendgrid)か判定して条件分岐させる事ができるでしょうか?
試した事。
lalaravel bootstrap/app.php
を以下に修正。
app.php
1/* 2|-------------------------------------------------------------------------- 3| 環境によって読み込む.envファイル切り替え 4|-------------------------------------------------------------------------- 5*/ 6 7switch ($_SERVER['localhost'] ?? 'localhost') { 8 case 'production.co.jp': 9 $app->loadEnvironmentFrom('.env.production'); 10 break; 11}
しかし、「環境変数で開発環境か本番環境か判定して条件分岐する」とはニュアンスが違うような、、、
そもそもswitch ($_SERVER['sample']、case 'localhost':としてみて、
app.php
1switch ($_SERVER['sample'] ?? 'localhost') { 2 case 'localhost': 3 $app->loadEnvironmentFrom('.env.production'); 4 break; 5}
localhostにアクセスしたら case 'localhost':以降が実行すると、以下のエラーメッセージがブラウザから表示されました。
Expected response code "250/251/252" but got code "550", with message "550 5.7.1 Relaying denied".
bootstrap/app.php を編集もうまくできていませんが、この方法では「環境変数で開発環境か本番環境か判定して条件分岐する」と意図する事が違うような気がします。
環境変数で開発環境(mailhog)か本番環境(sendgrid)か判定して条件分岐させる事ができるでしょうか?
実際にSERVER_NAMEには何が入ってるんでしょう。
コメントありがとうございます。
TOPのviewを返す関数に
dd(request()->server->get('SERVER_NAME'));
を追加した結果 「""」 が返ってきました。
*/
public function index()
{
$users = User::orderBy('created_at', 'desc')->take(3)->get();
//SERVER_NAME'確認のために以下を追加
dd(request()->server->get('SERVER_NAME'));
return view('/top', compact('users'));
}
SERVER_NAMEの確認方法は上記であっていますか?
コードで $_SERVER['SERVER_NAME'] を使われてるのでその中身の確認をしてもらいたかったのですが・・。
すみません。よく理解できていません。。。。
「コードで $_SERVER['SERVER_NAME'] を使われてる」
ここですが、$_SERVER['SERVER_NAME'はどこで使われているいますか?
ご自身が提示された
>2.bootstrap/app.phpを以下に編集。
の下のコードにあります。
ただそもそもSERVER_NAMEってホスト名が来るはずなので
https://www.php.net/manual/ja/reserved.variables.server.php
http://prod/~~
というアクセスをしたときにprodが入るはずなのですが、本番ってどのような環境ですか?
ありがとうございます。
開発環境用メールテストにmailhogを使っており、本番環境用にTwilio SendGridを使用
します。
SendGridのAPIキーを使って、SendGridの動作は確認できています。
開発環境(メール送信にmailhog)では.envを使い、本番では.env.prodを読み込むように、読み込む.envファイルを環境ごとに切り替えしたいです。
しかし、現状本番環境(UR未取得)ないので、開発環境のlocalhostにアクセスしたときに.env.prod を読み込ませ、SendGridの動作確認。を取りたい。
mailhogかsendgrid使うかは環境変数で開発環境か本番環境か判定して条件分岐するようにしたいです。
>環境変数で
各環境の端末自体に同名キーの環境変数を設定すれば良いのではないでしょうか。
https://www.php.net/manual/ja/function.getenv.php
//localhostにアクセスした時は.envを読みにいく
switch ($_SERVER['http://localhost'] ?? 'local') {
//production.co.jp(本番環境)にアクセスした時は、'.env.prodを読みにく。
case 'production.co.jp':
$app->loadEnvironmentFrom('.env.prod');
break;
}
この認識で間違い無いでしょうか?
いえ、全然・・・。
「http://localhost」というキーにするのでしたら構わないですが、そのキーは不適切な気もします。
ただ、環境毎にファイルを作るより.env自体を環境にあわせてデプロイするのが最も簡単だと思いますが。
(Javaのようにプロパティファイルも込みでコンパイル必要であれば別ですが、PHPはそうではないので)
開発環境の.envをSendGrid使うように一時的に書き換えればいいだけ。mailhogに戻すときはまた書き換えればいい。簡単にできることを難しく考えすぎ。
毎度のXY問題。本当にやりたいことを書かずに質問すると正しい回答が得られない。
ありがとうございます。
おっしゃるように、.envを書き換えればいい話なのですが、
「環境変数で開発環境か本番環境か判定して条件分岐するようにしてもらいたい」
という要望を受けて、今回の質問をさせて頂きました。
「環境変数で開発環境か本番環境か判定して条件分岐するようにしてもらいたい」
こちらの要望に応えるのに、 bootstrap/app.php にコードを追記する方法が見つかりました。 ひょっとすると、 bootstrap/app.phpから解決するのも、要望から外れているのかもしれません。。。。
環境変数で開発環境(mailhog)か本番環境(sendgrid)か判定して条件分岐するようにしたいです。
質問の意図が伝わりにくくてすみません。
だいぶ削られたようですが、より丸投げ感が増してしまっているので回答はしていますが修正依頼をしています。
丸投げにしているつもりはなく、どうすれば質問の意図が伝わるかと思い、文章を変えてみたのですが、、、
そのように伝わっていたなら、申し訳ありませんでした。
いえ、現状「やりたいこと」が書いてあって「どうすれば」だけなので、
「調べたこと試したこと」部分がごっそりなくなった今では完全に丸投げと言わざるを得ません。
※責めているわけではなく、情報を適切に提示してもらいたいだけです
回答3件
あなたの回答
tips
プレビュー
