在 运行 计划时获取 laravel 环境
Get laravel environment when running schedule
我在 Laravel 5 计划中设置了一些命令。输出存储在文件中并通过电子邮件发送给我。
由于项目有多个 "copies",我想使用环境名称来判断电子邮件来自哪个副本。
我尝试在时间表描述中使用 app()->environment()
- 它会引发错误:
Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in ...
我也试过 getenv('APP_ENV')
- 这不会导致任何错误,但我得到一个空白的环境名称。
App::environment()
也没用。
如果我在常规请求(例如控制器操作或视图)中使用它们,所有这些都可以正常工作。
有没有办法在 运行 安排时确定当前环境?
谢谢
我找到了解决方案。
在我的 App\Console\Kernel 计划方法中,在设置应用程序所有计划之前,我添加了一行:
Dotenv::required('APP_ENV');
请记住,由于名称空间的原因,您必须 use Dotenv;
或在上面的行中添加一个 \。
这样系统 "makes sure" 就会加载 APP_ENV 并且 app()->environment()
会返回正确的环境名称。
另一个答案不适用于 Laravel 5.3,因为 Dotenv
不应静态调用。此外,它需要 .env
文件的路径作为第一个参数。
您可以改用它(假设您在 /app/Providers/AppServiceProvider.php
内):
$env = new Dotenv(realpath(__DIR__.'/../../'.'.env'));
$env->required('APP_ENV');
更好的方法是在调用调度程序时定义环境,例如:
php artisan schedule:run --env=local
我在 Laravel 5 计划中设置了一些命令。输出存储在文件中并通过电子邮件发送给我。
由于项目有多个 "copies",我想使用环境名称来判断电子邮件来自哪个副本。
我尝试在时间表描述中使用 app()->environment()
- 它会引发错误:
Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in ...
我也试过 getenv('APP_ENV')
- 这不会导致任何错误,但我得到一个空白的环境名称。
App::environment()
也没用。
如果我在常规请求(例如控制器操作或视图)中使用它们,所有这些都可以正常工作。
有没有办法在 运行 安排时确定当前环境?
谢谢
我找到了解决方案。
在我的 App\Console\Kernel 计划方法中,在设置应用程序所有计划之前,我添加了一行:
Dotenv::required('APP_ENV');
请记住,由于名称空间的原因,您必须 use Dotenv;
或在上面的行中添加一个 \。
这样系统 "makes sure" 就会加载 APP_ENV 并且 app()->environment()
会返回正确的环境名称。
另一个答案不适用于 Laravel 5.3,因为 Dotenv
不应静态调用。此外,它需要 .env
文件的路径作为第一个参数。
您可以改用它(假设您在 /app/Providers/AppServiceProvider.php
内):
$env = new Dotenv(realpath(__DIR__.'/../../'.'.env'));
$env->required('APP_ENV');
更好的方法是在调用调度程序时定义环境,例如:
php artisan schedule:run --env=local