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

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

ただいまの
回答率

90.52%

  • PHP

    20331questions

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

  • Laravel 5

    1883questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Laravel 5.1 で Monolog\Handler\SlackHandler を production 環境のみ適用する

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 428

KazuyaGosho

score 24

前提・実現したいこと

Laravel 5.1 でアプリケーションを作っています。
production 環境のみ、エラーがあった際にSlackに通知されるようにしたいです。

該当のソースコード

vim bootstrap/app.php

// ...

// 本番の場合、Slackに通知する
if (env('APP_ENV') === 'production') {
    $app->configureMonologUsing(function($monolog) {
        $slack_config = config('slack.error_alert');
        $monolog->pushHandler(
            new \Monolog\Handler\SlackHandler(
                $slack_config['token'], $slack_config['channel'],
                $slack_config['username'], true, null, $slack_config['level']
            )
        );
    });
}

return $app;

これで良いかと思いましたが、 env('APP_ENV') が null になってしまい判定できませんでした。

試したこと

分岐のところで、下記2つも試しましたが駄目でした。

if ($app->environment('production') { // ...
if (App::environment('production') { // ...

また、 判定する場所も変えてみました。
環境毎の設定はできましたが、肝心のSlackへの通知ができませんでした。

vim app/Providers/AppServiceProvider.php 

<?php 

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    // ...

    public function boot()
    {
        // 本番の場合、Slackに通知する
        if (env('APP_ENV') === 'production') {
            $this->app->configureMonologUsing(function($monolog) {
                $slack_config = config('slack.error_alert');
                $monolog->pushHandler(
                    new \Monolog\Handler\SlackHandler(
                        $slack_config['token'], $slack_config['channel'],
                        $slack_config['username'], true, null, $slack_config['level']
                    )
                );
            });
        }

        $this->app['request']->server->set(env('APP_PROTOCOL'), 'on');
    }

    // ...
}

public/index.php でもほぼ同様です。

補足情報(言語/FW/ツール等のバージョンなど)

Slackへの通知自体はできているので、例えばTokenが間違っているということはありません。
環境の判定でつまづいています。

下記の記事を参考にしました。

  • http://qiita.com/qiita-kurara/items/04a3de448506e1d7876c
  • http://stackoverflow.com/questions/32354102/send-a-slack-notification-every-time-logerror-is-triggered
$ composer show

laravel/framework   v5.1.45
monolog/monolog     1.22.0
$ php --version

PHP 7.0.13 (cli) (built: Dec  6 2016 21:48:15) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

あまり綺麗な方法では無いですが、 .env ファイルを直接見に行くようにしました。

$dotenv_path = __DIR__.'/../.env';
if (file_exists($dotenv_path) &&
    strpos(file_get_contents($dotenv_path), 'APP_ENV=production') !== false) {

    //...

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

.envファイル内にAPP_ENV=productionという記述がありますでしょうか?
env('APP_ENV')で取得できるので、まずはそちらを確認されると良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/09 14:10

    ご回答ありがとうございます。

    書き忘れておりましたが、 `.env` ファイルは作成済みでした。

    `cat .env`

    ```
    APP_ENV=production

    # ...
    ```

    結果、直接 `.env` を見に行くという泥臭いやり方で解決致しました。

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Zend_Validatorのメッセージカスタマイズについて

    バリデータのエラーメッセージをカスタマイズして表示させたいのですが、変数が存在しない場合に、NotEmptyの判定でデフォルトのエラーメッセージが表示されます。 $spec=

  • 解決済

    slack botを使おうとして

    現在windowsでのコマンドプロンプトで行おうとしており、http://toach.click/slack-botkit/のページに沿って導入しようとしていましたが,token=

  • 解決済

    SlackのOutgoing WebHooksをGASで受け取ってreturnで反応元に投稿したい

    前提・実現したいこと タイトルの通りです。 Outgoing WebHooksが反応するチャンネルを制限していないので、doPostの戻り値でSlackに投稿できたら楽だと思い

  • 解決済

    ZendFrameworkのsetOptionsに文字列での選択肢を追加したい

    前提・実現したいこと 実現したいことは、よくあるselectタグのoptionに文字列での選択肢を追加したいと考えています。 選択肢としましては、MrとMisの二つから選択でき

  • 解決済

    スラックのボット作成

    スラックにボット機能を作成しようと考えています。 実現したいことは、 1,あるところからメッセージが入ってくる(例えば巨人対阪神の結果は、4対0で巨人の勝ち) 2,1のメ

  • 受付中

    slackbotを作成したい

    前提・実現したいこと slackbotを作成したいです.slackbotというライブラリはインストールできています. 発生している問題・エラーメッセージ python run.

  • 解決済

    C#でapiでslackに投稿したいです。

    こんにちは。  Windows10でC#のアプリケーションを開発しています。  Visual Studio 2017 Communityを使っています。  前提・実現したいこと

  • 解決済

    php 継承関係について

    お世話になっております。 PHPの継承の関係について質問させてください。 ある理由がありまして、継承先から継承元にメソッドを渡したいのですがどうしたら良いでしょうか。 元のファ

同じタグがついた質問を見る

  • PHP

    20331questions

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

  • Laravel 5

    1883questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。