2014-12-18 3 views
1

Я запускаю Ruby on Rails 4.1 в режиме производства, и я отправляю успешную электронную почту из своего веб-приложения на свой счет GMail. Это письмо содержит изображение (логотип приложения), но это изображение не отображается в теле сообщения.Странная ошибка при рендеринге изображения по электронной почте

Logging запрос изображения на стороне сервера я получаю следующее сообщение об ошибке:

ActionController::RoutingError (No route matches [GET] "/assets/my_app_logo.png") 

инспектирующих исходный код по электронной почте я получаю:

<img class="CToWUd" alt="MyAppName" src="https://ci4.googleusercontent.com/proxy/J8xdV03MSjJGOJh6F8T5ntqhjC2YJAiShAWJshvcOLn9THWAC5hKwp4DCLc6csuoojWlaKzPXjt-6zBAkZZvzpYMH=s0-d-e1-ft#http://www.my_app_name.com/assets/my_app_logo.png"> 

В чем проблема? Как я могу это решить?


В моем частичном шаблоне у меня есть:

<%= link_to(image_tag("#{root_url}assets/my_app_logo.png", :alt => MyAppName), root_url.to_s) %> 

Update после @ kasperite замечания

Can you post what's in application.css? also is it application.css under assets/stylesheets?

Да, мой application.css.scss файл assets/stylesheets:

// ... 
.my_app_logo { background-image: image-url("my_app_logo.png"); display: inline-block; } 
// ... 

Однако application.css.scss является не используется для визуализации электронной почты. Я использую код, как указано в приведенном выше частичном шаблоне.

+0

У вас есть config.serve_static_assets, установленный в false в производственной среде? –

+0

Да, в рабочей среде есть 'config.serve_static_assets = false'. – user502052

+0

- это папка «assets» под общим или приложением? Я думал, что вы не должны получать доступ к «приложению/активам» на производстве? – kasperite

ответ

0

Думаю, я выясню, что у вас есть проблема. Предполагая, что вы прочитали, как работает конвейер, все под app/assets будет скомпилировано/сжато до public после развертывания. Поэтому в этом случае, если вы поместите свое изображение под assets/images, оно должно работать. Этот комплект связывает драгоценный камень звездочки.

Ошибка Sprockets::FileNotFound может быть связана с одной из отсутствующих зависимостей. Есть ли еще сообщение об ошибке?

+0

Возникает ли проблема в производстве GMail? – user502052

+0

Да, это вызывает и мое развитие. https://ci6.googleusercontent.com/proxy/9O9PJwDPccxExdIypBhL2Zy_wykZ7mwwOhco095BWl6kRoVi5C9UqhigSuijPCmPleGrrb4OL9uVn8hh7cdRP0dwrkRPZJF0LQXFe-LAuiPjps9D6IeKJ4vaagKf5SpUMoQPqbvfmdDzci1e85mU-HsNQxsd2a0akgUNpuOgtRGrCA=s0-d-e1-ft –

0

Я думаю, проблема в том, что после того, как ваши активы скомпилированы для Production, my_app_logo.png технически не существует. Он фактически переименован путем добавления отпечатка пальца к активу, поэтому фактическим активом является my_app_logo-SOME_FINGERPRINT_STRING.png.

Суть проблемы заключается в том, что вы пытаетесь сделать абсолютный путь к изображению в вашем image_tag помощнике. Попробуйте сделать это вместо этого:

<%= link_to(image_tag("my_app_logo.png", :alt => MyAppName), root_url.to_s) %> 

Это должно сгенерировать правильную ссылку на переименованное изображение.

Смежные вопросы