Problém s RabbitMQ a generovanými odkazy

- Martin Vaněk
- Člen | 10
Dobrý den,
navazuji na tohle téma kde se mi nepodařilo procpat Makro link do šablony. Problém nastává pouze, když se to odesílá z fronty Rabbita.
Nedokáže vygenerovat odkaz. Pro odesílání e-mailů používám tuto třídu. Do funkce send() jsem hodil debugger a při klasickém on-the-run odesílání e-mailů se odkaz vygeneruje správně. V případě že se odesílá z fronty Rabbita, tak ten odkaz je následující – „http:///“.
Žádnou chybu to nevyhodí. Měl by někdo nápad jak tenhle problém vyřešit? Je to pro mě podstatné, protože e-mailů bude aplikace posílat hodně a rád bych Rabbitem trochu zrychlil běh.
Dík všem.
PS: Rabbita obsluhuji takto –
<?php
namespace App\Queue;
use App\Mailers\SatisfiedCustomerPhotoMailer;
use Kdyby;
use Nette;
use App;
use PhpAmqpLib\Message\AMQPMessage;
class SatisfiedCustomersEmailsQueue extends Nette\Object implements Kdyby\RabbitMq\IConsumer
{
/** @var Kdyby\RabbitMq\Connection */
private $rabbitmq;
/** @var App\Mailers\SatisfiedCustomerPhotoMailer */
private $mailer;
public function __construct(Kdyby\RabbitMq\Connection $rabbitmq, SatisfiedCustomerPhotoMailer $mailer)
{
$this->rabbitmq = $rabbitmq;
$this->mailer = $mailer;
}
public function append($email)
{
$this->rabbitmq
->getProducer('emails')
->publish(serialize($email));
}
public function process(AMQPMessage $message)
{
$report = unserialize($message->body);
$this->mailer->send($report);
return TRUE;
}
}
Editoval Martin Vaněk (24. 4. 2015 21:24)

- Filip Procházka
- Moderator | 4668
S Rabbitem to přímo nijak nesouvisí. „Problém“ je v tom, že ten
worker který si bere úkoly přes rabbita, běží v CLI. A v CLI Nette
neví, na jaké doméně běží tvůj web. Proto to generuje tu divnou url
http:///. Stejný problém bys měl i s crony v CLI.
Kdyby/Console to řeší, protože ti dovolí nastavit doménu, kterou pak
vnutí do Http\Request
console:
name: "Rohlik.cz"
url: "https://www.rohlik.cz"
Novější a o něco čistější řešení je nastavit si správně novou
třídu LinkGenerator.
Například tím že nastavíš tu console.url měla by se vnutit
do Http\Request, ze kterého si bere referenční url i
LinkGenerator. Zatím na to není žádná přímá konfigurace
v Nette.
Další řešení je napsat si nějaký DomainRouter, který zkrátka bude vždy generovat url se správnou doménou. Pak už jen stačí vždy generovat absolutní cesty, aby Nette nezahazovalo doménu.
<a href="{plink //:Front:Homepage:}">rohlik.cz</a>

- Martin Vaněk
- Člen | 10
Myslel jsem si že to nebude přímo souviset s Rabbitem, každopádně úprava Kdyby/Console mě nenapadla. Díky! Už to frčí.