【问题标题】:Laravel 5.2 queue ignores .envLaravel 5.2 队列忽略 .env
【发布时间】:2017-06-10 10:27:22
【问题描述】:

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

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

这在我拥有的所有 3 个环境中都可以正常工作 - 本地、暂存和生产。 asset() 使用每个环境中配置的 APP_URL 正确地构造了相应图像的完全限定 URL。

我决定改用Laravel queues 发送邮件。

  • 我将.env 中的QUEUE_DRIVER 更改为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

config/app.php

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

asset() 在我的电子邮件中生成的 URL 是:

http://localhost/images/foo.jpg

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

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

使用队列时,我的.env 中定义的APP_URL 似乎没有出现,因此使用了http://localhost 的默认值。不使用队列,同样的代码也能正常工作。

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

我在 2 年前从使用 Laravel 4.2 的人那里找到了一个 similar question,但没有任何答复。我发现了其他一些类似的参考资料,但没有解决方案。有人看过这个或有什么建议吗?

【问题讨论】:

  • 我知道这很愚蠢。但是env('APP_URL').'/images/'.$purchase-&gt;image p.s. 怎么样?这只是一种解决方法,也许对于命令行执行它需要不同的 env 文件?你能检查asset方法的代码吗?
  • 我觉得这个问题还没有解决。在我的自定义工匠控制台命令中,我总是使用确切的路径、url 等,因为这个问题从来没有按原样工作。
  • 谢谢,猜猜这就是我必须做的......谢谢你的帮助!
  • @num8er 我知道已经晚了,但您的评论确实是答案 - 这是一个错误。如果您想将其重新发布为答案,我很乐意接受! :-)
  • 谢谢)我不是在寻找赞成票)只是想提供帮助。只需总结您的解决方案并用解决方案回答您自己的问题,对来这里的人有所帮助

标签: php laravel-5.2


【解决方案1】:

感谢@num8er 找到解决方案。

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

一种解决方法是按照 cmets 中的 @num8er 建议进行操作,并在视图中硬编码资产路径,而不是使用 asset()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 2019-07-27
    • 2014-08-29
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2016-03-29
    • 2017-11-18
    相关资源
    最近更新 更多