#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" />