【问题标题】:Get laravel environment when running schedule运行调度时获取laravel环境
【发布时间】:2017-08-03 04:14:24
【问题描述】:

我在 Laravel 5 schedule 中设置了一些命令。输出存储在文件中并通过电子邮件发送给我。

由于项目有多个“副本”,我想使用环境名称来判断电子邮件来自哪个副本。

我尝试在日程描述中使用app()->environment() - 它会引发错误:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in ...

我也试过getenv('APP_ENV') - 这不会导致任何错误,但我得到一个空白的环境名称。

App::environment() 也不起作用。

如果我在常规请求(例如控制器操作或视图)中使用它们,所有这些都可以正常工作。

有没有办法在运行计划时确定当前环境?

谢谢

【问题讨论】:

    标签: php laravel environment schedule


    【解决方案1】:

    我找到了解决办法。

    在我的 App\Console\Kernel 调度方法中,在设置应用所有调度之前,我添加了一行:

    Dotenv::required('APP_ENV');
    

    请记住,由于命名空间,您要么必须 use Dotenv; 要么在上面的行中添加 \。

    这样系统“确保” APP_ENV 被加载并且app()->environment() 正在返回正确的环境名称。

    【讨论】:

      【解决方案2】:

      另一个答案不适用于 Laravel 5.3,因为不应静态调用 Dotenv。此外,它需要.env 文件的路径作为第一个参数。

      你可以用这个代替(假设你在/app/Providers/AppServiceProvider.php里面):

      $env = new Dotenv(realpath(__DIR__.'/../../'.'.env'));
      $env->required('APP_ENV');
      

      【讨论】:

        【解决方案3】:

        更好的方法是在调用调度器时定义环境,例如:

        php artisan schedule:run --env=local
        

        【讨论】:

          猜你喜欢
          • 2015-04-13
          • 1970-01-01
          • 2013-12-19
          • 2011-11-02
          • 2017-03-29
          • 1970-01-01
          • 2015-05-08
          • 2013-02-02
          • 1970-01-01
          相关资源
          最近更新 更多