質問編集履歴

2 readoble

KazuyaGosho

KazuyaGosho score 36

2017/03/08 18:31  投稿

Laravel 5.1 で Monolog\Handler\SlackHandler を production 環境のみ適用する
###前提・実現したいこと
Laravel 5.1 でアプリケーションを作っています。
 
`production` 環境のみ、エラーがあった際にSlackに通知されるようにしたいです。
 
###該当のソースコード
`vim bootstrap/app.php`
```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つも試しましたが駄目でした。
```php
if ($app->environment('production') { // ...
if (App::environment('production') { // ...
```
また
また、 判定する場所も変えてみました。
環境毎の設定はできましたが、肝心のSlackへの通知ができませんでした。
`vim app/Providers/AppServiceProvider.php`
```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');
   }
   // ...
}
```
これだと、環境毎の設定はできましたが、肝心のSlackへの通知ができませんでした。
`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
```
よろしくお願い致します。
  • PHP

    27307 questions

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

  • Laravel 5

    2948 questions

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

1 fix typo

KazuyaGosho

KazuyaGosho score 36

2017/03/08 18:28  投稿

Laravel 5.1 で Monolog\Handler\SlackHandler を production 環境のみ適用する
###前提・実現したいこと
Laravel 5.1 でアプリケーションを作っています。
`production` 環境のみ、エラーがあった際にSlackに通知されるようにしたいです。
###該当のソースコード
`vim bootstrap/app.php`
```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つも試しましたが駄目でした。
```php
if ($app->environment('production') { // ...
if (App::environment('production') { // ...
```
また
`vim app/Providers/AppServiceProvider.php`
```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');
   }
   // ...
}
```
これだと、環境毎の設定はできましたが、肝心のSlackへの通知ができませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
下記の記事を参考にしました。
- 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
```
よろしくお願い致します。
  • PHP

    27307 questions

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

  • Laravel 5

    2948 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る