тег изображения в почтовой программе, не использующей asset host


image_tag не использует asset_host, который я установил. Есть идеи почему? Единственное, о чем я могу думать, это то, что он является почтовым отправителем.

config / environment / development.РБ

config.action_controller.asset_host = "http://localhost:3000"

myMailer.РБ

<%= image_tag "logo.png", :style=>"margin-left:10px; padding-bottom:15px;" %>

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

<img alt="Logo" src="/images/logo.png?1303090162" style="margin-left:10px; padding-bottom:15px;" />

в консоли:

> MyApp::Application.config.action_controller
#<OrderedHash {… :asset_host=>"http://localhost:3000", …}>

мне нужен image_tag, чтобы создать полный url-адрес пути, потому что он будет отображаться в электронная почта.

3 54

3 ответа:

Я был неправ. Это решение вам нужно (до rails 3.1, где конфигурации asset_host становятся унифицированными):

config.action_mailer.asset_host = "http://localhost:3000"

нам нужно указать обе конфигурации.контроллер действий.asset_host и config.action_mailer.asset_host, на рельсах 3.1 и 3.2.

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

config.action_controller.asset_host = 'http://localhost:3000'
config.action_mailer.asset_host = config.action_controller.asset_host

где 'http://localhost:3000' должен быть заменен URL вашего хоста (и порт, если применимо).

Это должно быть установлено на обоих action_controller и action_mailer, даже в Rails 3.2.x.

сбойного кода, почему вы не можете сделать это здесь:

# actionpack/lib/action_view/helpers/asset_paths.rb, line 27
def compute_public_path(source, dir, ext = nil, include_host = true)
  # More code up here....

    if controller && include_host
      has_request = controller.respond_to?(:request)
      source = rewrite_host_and_protocol(source, has_request)
    end
end

вот оскорбительный файл на GH: https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/asset_paths.rb

поскольку в шаблоне представления ActionMailer отсутствует контроллер, вы не получаете команду для перезаписи на основе asset_host. Вероятно, это должен быть билет, открытый для основной команды Rails.

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

config.action_mailer.default_url_options = {:host=>"localhost", :port=>3000, :protocol=>"http://"}

Я уверен, что это будет работать только для url_for хотя.