2017-01-25 2 views
2

Ich habe eine Laravel 5.2 App, die ein paar E-Mails sendet, wenn ein Benutzer ein Produkt kauft. Die E-Mail-Ansicht enthält Verweise auf einige Bilder, etwa so:Laravel 5.2 Warteschlange ignoriert .env

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

Dies funktioniert in allen drei Umgebungen Ich habe - lokal, Inszenierung und Produktion. asset() erstellt die vollständig qualifizierten URLs ordnungsgemäß zu dem entsprechenden Image, wobei die konfigurierten APP_URLs in jeder Umgebung verwendet werden.

Ich entschied mich für die Verwendung der Laravel queues, um die E-Mails zu senden.

  • änderte ich den QUEUE_DRIVER in .env zu database
  • php artisan queue:table
  • php artisan migrate
  • php artisan queue:listen
  • Changed
    \Illuminate\Support\Facades\Mail::send(
    

    zu

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

und machte einen Testkauf. Der Prozess funktioniert, die Mail wird gesendet, aber die Bild-URLs in den gelieferten E-Mails sind falsch. Es scheint, dass meine konfigurierte APP_URL nicht abgeholt wird.

.env

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

config/app.php

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

Die URLs asset() per E-Mail erzeugt sind:

http://localhost/images/foo.jpg 

, die falsch ist, sie sollte sein:

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

Es sieht aus wie mit Warteschlangen der APP_URL definiert in meinem .env nicht gesehen, so dass der Ausfall von http://localhost verwendet wird. Wenn Sie keine Warteschlangen verwenden, funktioniert derselbe Code einwandfrei.

Das einzige, was mir einfällt, ist, dass die CLI PHP-Umgebung, die die Warteschlange behandelt, sich irgendwie von der Apache PHP-Umgebung unterscheidet, aber ich kann mir nicht vorstellen, welcher Unterschied .env ignoriert.

Ich fand eine similar question von jemandem mit Laravel 4.2, 2 Jahren, ohne Antwort. Ich fand ein paar andere ähnliche Referenzen, aber keine Lösung. Wer hat das gesehen oder Anregungen?

+0

Ich weiß, es ist dumm. Aber wie wäre es mit 'env ('APP_URL'). '/ Images /'.$ purchase-> image' p.s. es ist nur Workaround, vielleicht für Kommandozeilen-Ausführungen benötigt es andere Env-Datei? Können Sie den Code der Assets überprüfen? – num8er

+0

In der Tat existiert dieses Problem noch: https://github.com/laravel/framework/issues/14139 – num8er

+0

Danke @ num8er, mein Googling hat dieses Problem nicht angezeigt. Lass es mich ein bisschen genauer ansehen ... ja, ich kann Abhilfe schaffen, vielleicht kann ich das ja auch nicht. Es ist seltsam, dass es nicht häufiger ist, aber ich bin sicherlich nicht die einzige Person, die 'asset()' in E-Mails verwendet. –

Antwort

0

Dank @ num8er für das Finden der Lösung.

Dies ist ein bekanntes Problem in Laravel, die von Symfony kommt: https://github.com/laravel/framework/issues/14139

Eine Abhilfe als @ ist zu tun num8er in den Kommentaren vorgeschlagen und in den Ansichten fest einprogrammieren Asset Pfade, als vielmehr asset() verwenden:

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