在运行计划时获得laravel环境

时间:2015-03-27 07:24:58

标签: php laravel environment schedule

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

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

我尝试在计划说明中使用app()->environment() - 它会抛出错误:

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

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

App::environment()也无效。

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

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

谢谢

3 个答案:

答案 0 :(得分:3)

我找到了解决方案。

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

Dotenv::required('APP_ENV');

请记住,您必须use Dotenv;或在上面的行中添加\,因为名称空间。

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

答案 1 :(得分:1)

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

你可以改用它(假设你在/app/Providers/AppServiceProvider.php内):

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

答案 2 :(得分:0)

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

php artisan schedule:run --env=local