Как получить абсолютный путь для таблиц стилей в mailer с конвейером ресурсов?

#ruby-on-rails #ruby-on-rails-3 #asset-pipeline

#ruby-on-rails #ruby-on-rails-3 #asset-конвейер

Вопрос:

Помощники просмотра в моем шаблоне Mailer дают мне относительные URL-адреса для таблицы стилей и изображений. Конечно, это не сработает, если я просматриваю электронную почту в Gmail, например.

В apps/views/layouts/mailer.html.erb

 <%= stylesheet_link_tag "application" %>
...
<%= link_to(image_tag("logo.png"), "http://mysite.com") %>
  

Отображается как:

 <link href="/assets/application-c90478153616a4165babd8cc6f4a28de.css" media="screen" rel="stylesheet" type="text/css" />
...
<a href="http://mysite.com"><img alt="Logo" src="/assets/logo-d3adbf8d0a7f7b6473e2130838635fed.png" /></a>
  

Как мне заставить Rails вместо этого давать мне абсолютные ссылки? Я на Rails 3.1, конвейер активов действует.

Ответ №1:

`config.action_controller.asset_host обрабатывает префикс хоста в представлениях, сгенерированных из ActionController.

Для всего, сгенерированного в электронном письме, вы ищете параметры конфигурации ActionMailer, более конкретно:

  • ActionMailer::Base.asset_host обработает ваши image_tags и
  • ActionMailer::Base.default_url_options[:host] будет следить за вашими link_to тегами.

например:

 ActionMailer::Base.asset_host                 = "http://blah.com"
ActionMailer::Base.default_url_options[:host] = "blah.com"
  

Обратите внимание, что вам не нужно указывать префикс http для узла URL по умолчанию, вы будете указывать для узла ресурсов.

Я указал их в своем environment.rb после инициализатора приложения. Я бы рекомендовал установить переменную конфигурации приложения для каждого домена среды.

Ответ №2:

Для rails 3.2 и ActionMailer используйте:

 config.action_mailer.asset_host = "http://www.example.com"
  

Ответ №3:

Это может быть немного взломом, но если вы укажете хост ресурсов, все помощники будут учитывать это при рендеринге ссылок. Итак, если вы установите

 config.action_controller.asset_host = "http://mysite.com"
  

в вашей конфигурации stylesheet_link_tag будет указано имя хоста.

Комментарии:

1. Спасибо за ответ. К сожалению, это не работает для шаблонов, созданных для почтовых программ. Есть еще идеи?

2. У вас опечатка, должно быть config.action_mailer.asset_host

Ответ №4:

В этой теме rocketscientist и Джо спросили о других идеях:

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/stylesheet_link_tag

Вы можете сгенерировать полный css следующим образом (если вас не волнует хостинг ресурсов). Однако ответ Дэвида Рэдклиффа должен сработать.

stylesheet_link_tag "http://www.railsapplication.com/style.css " # =>
 <ссылка href="http://www.railsapplication.com/style.css " медиа ="экран" rel="таблица стилей" тип ="текст / css" />