Ответ 1
Я раньше был неправ. Это необходимое вам решение (до тех пор, пока рельсы 3.1, где конфигурации asset_host не будут унифицированы):
config.action_mailer.asset_host = "http://localhost:3000"
image_tag не использует параметр asset_host, который я установил. Любые идеи почему? Единственное, что я могу придумать, это иметь дело с тем, что это Mailer.
конфиг/окружающая среда /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.1, где конфигурации asset_host не будут унифицированы):
config.action_mailer.asset_host = "http://localhost:3000"
Нам нужно указать как 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.
Оскорбительный код о том, почему вы не можете сделать это, находится здесь:
# 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 отсутствует контроллер, вы не получите команду переписать на основе ресурса-актива. Вероятно, это должен быть билет, открытый для основной команды Rails.
Вы можете попробовать следующую конфигурацию и посмотреть, помогает ли она:
config.action_mailer.default_url_options = {:host=>"localhost", :port=>3000, :protocol=>"http://"}
Я уверен, что он работает только на url_for
.