web-dev-qa-db-ja.com

asset_hostを使用していないメーラーのimage_tag

image_tagは、設定したasset_Hostを使用していません。なぜアイデアがありますか?私が考えることができる唯一のことは、それがメーラーであることと関係があるということです。

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", …}>

電子メールに表示されるため、フルパスURLを作成するにはimage_tagが必要です。

54
RyanJM

以前は間違っていました。これが必要なソリューションです(Rails 3.1 asset_Host設定が統合されるまで):

config.action_mailer.asset_Host = "http://localhost:3000"
92

Rails 3.1 and 3.2。でconfig.action_controller.asset_Hostとconfig.action_mailer.asset_Hostの両方を指定する必要があります。

電子メールビューと非電子メールビューの両方でホスト名をimage_tagに追加するには、環境ファイルに次を追加します。

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

「http:// localhost:3000」は、ホストURL(および該当する場合はポート)に置き換える必要があります。

Rails 3.2.x.)であっても、action_controllerとaction_mailerの両方で設定する必要があります。

22
Tiago Franco

できない理由に関する問題のコードは次のとおりです。

# 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テンプレートにはControllerがないため、asset_Hostに基づいて書き換えるコマンドを取得できません。これはおそらく、Railsコアチームに対して開かれたチケットでなければなりません。

次の構成を試して、それが役立つかどうかを確認できます。

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

私はそれがurl_forしかし。

0