image_tag в почтовой программе, не использующей asset_host - PullRequest
54 голосов
/ 21 апреля 2011

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

config / environment / development.rb

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

myMailer.rb

<%= 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 ]

92 голосов
/ 23 апреля 2011

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

config.action_mailer.asset_host = "http://localhost:3000"
22 голосов
/ 18 сентября 2012

Нам нужно указать как config.action_controller.asset_host, так и config.action_mailer.asset_host, на Rails 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.

0 голосов
/ 21 апреля 2011

Код обидчика о том, почему вы не можете это сделать, находится здесь:

# 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 View отсутствует контроллер, вы не получите команду для перезаписи на основе asset_host. Вероятно, это должен быть билет, открытый основной команде Rails.

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

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

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

...