Laravel 5.2队列忽略.env

时间:2017-01-25 09:46:52

标签: php laravel-5.2

我有一个Laravel 5.2应用程序,当用户购买产品时会发送一些电子邮件。电子邮件视图包含对某些图像的引用,如下所示:

<img src="{{ asset($purchase->image) }}">

这在我拥有的所有3种环境中都很好 - 本地,登台和制作。 asset()使用每个环境中配置的APP_URL正确地将完全限定的URL构建到适当的图像。

我决定转而使用Laravel queues发送电子邮件。

  • 我将QUEUE_DRIVER中的.env更改为database
  • php artisan queue:table
  • php artisan migrate
  • php artisan queue:listen
  • 更改

    \Illuminate\Support\Facades\Mail::send(
    

    \Illuminate\Support\Facades\Mail::queue(
    

并进行了测试购买。该过程有效,邮件已发送,但传递的电子邮件中的图像URL错误。似乎我的配置APP_URL没有被选中。

.ENV

APP_URL=http://localhost/path/to/app

配置/ app.php

'url' => env('APP_URL', 'http://localhost'),

我的电子邮件中生成的网址asset()为:

http://localhost/images/foo.jpg

这是不正确的,它们应该是:

http://localhost/path/to/app/images/foo.jpg

看起来使用我的APP_URL中定义的.env排队的队列,因此使用默认的http://localhost。不使用队列,相同的代码工作正常。

我唯一能想到的是处理队列的CLI PHP环境与Apache PHP环境有某些不同,但我无法想象会有什么区别会导致.env被忽略。< / p>

2年前,我找到了使用Laravel 4.2的人similar question,没有回答。我找到了一些其他类似的参考但没有解决方案。有人见过这个或有任何建议吗?

1 个答案:

答案 0 :(得分:0)

感谢@ num8er寻找解决方案。

这是Laravel中一个来自Symfony的已知问题:https://github.com/laravel/framework/issues/14139

解决方法是在评论中建议@ num8er,在视图中硬编码资产路径,而不是使用asset()

config('app.url') . '/images/' . $purchase->image