Problém s RabbitMQ a generovanými odkazy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin Vaněk
Člen | 10
+
0
-

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
+
+3
-

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
+
+1
-

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