21

Chcę, aby wiadomości e-mail wysyłane z ActionMailer zawierały obrazy, które prowadzą do mojej aplikacji. W moim środowisku programistycznym, na przykład:Jak uzyskać pełny adres URL obrazu w asynchronicznym programie pocztowym Rails?

<img src="http://myfullappurl.dev/assets/myimage.png"> 

mam to w moim development.rb

config.action_controller.asset_host = 'myfullappurl.dev' 
config.action_mailer.asset_host = config.action_controller.asset_host 
config.action_mailer.default_url_options = { host: 'myfullappurl.dev', only_path: false } 

Ale nie mogę dostać moje szablony mail, aby uczynić pełny adres URL w każdym z tych sposób:

asset_path('myimage.png') 
asset_path('myimage.png', only_path: false) 
image_url('myimage.png') 

wiele podobnych pytań na ten temat są odbierane przez robi coś takiego:

"#{request.protocol}#{request.host_with_port}#{asset_path('image.png')}" 

Ale ponieważ moje e-maile są wysyłane asynchronicznie z Sidekiq, nie ma takiego obiektu, jak gdyby był, gdyby zostały wysłane synchronicznie w kontrolerze.

Czy brakuje rzeczy oczywistej, czy muszę walczyć z Railsami, aby to zrobić? Używam Rails 4, ale jestem pewien, że wszystko, co działa w wersji 3.1/3.2, powinno wystarczyć.

Odpowiedz

37

Więc jest to dziwne zachowanie, ale już rozwiązany ten problem. Okazuje się, że jeśli action_mailer.asset_host nie zaczyna się od http://, to zostanie zignorowane. Jest regex w actionpack/lib/action_view/helpers/asset_url_helper.rb który określa prawidłową ActionMailer URI:

URI_REGEXP = %r{^[-a-z]+://|^(?:cid|data):|^//} 

Jednak jeśli umieścisz http:// przed action_controller.asset_host wtedy skończy się wraz z linkami do http://http://myfullappurl.dev

Tak, aby rozwiązać to ja musiał dodać następujące mój development.rb

config.action_controller.asset_host = 'myfullappurl.dev' 
config.action_mailer.asset_host = 'http://myfullappurl.dev' 

Żeby było jasne, to jest Rails 4.0.0beta1 z e-maile są wysyłane asynchronicznie z Sidekiq, nie jestem pewien, czy to wpływa Rails 3.

+0

DZIĘKUJEMY. To było rozwiązanie do pobierania szyn 4.1.1 do wyświetlania adresów URL pełnego obrazu w wiadomościach e-mail w formacie HTML. –

+0

Kolejne niedoceniane odpowiedzi na SO. również, myślę, że lepiej jest używać https w większości przypadków, które nie są dev env. –

+0

Nie doświadczyłem żadnych problemów podczas dodawania protokołu do 'action_controller.asset_host', nie jestem pewien czy to zachowanie się zmieniło. Poprawka działa tak, jak opisano. :) – lime

8

wierzę trzeba ustawić je w swojej konfiguracji

config.action_controller.asset_host = 'http://localhost:3000' #Or your domain 
config.action_mailer.asset_host = config.action_controller.asset_host 
+0

I mam skonfigurowane. Używanie Pow w dev, stąd rozszerzenie .dev. –

2

w pliku środowiska (tj development.rb): -

config.action_mailer.asset_host = 'http://localhost:3000' #Or your domain 

w widoku pliku mailer: -

<%= image_tag('image_name.jpg') %> 

lub

<img src="<%= image_url('image.jpg') %>" %> 
Powiązane problemy