2016-05-04 8 views
3

Ich habe kürzlich alle meine App-Assets nach CDN verschoben und alles funktioniert einwandfrei. Alle Bilder werden in Ansichten geladen. Aber mein Problem ist, dass meine Bilder nicht in E-Mails geladen werden, die ich aus meiner Anwendung sende. Ich habe my CDN Path in production.rb Datei auch angegeben, aber immer noch nicht funktioniert. Wenn ich dieses Bild in E-Mails überprüfe, habe ich nicht einmal src für dieses Bild bekommen.Bilder werden nicht in E-Mails mit CDN-Hosts geladen. Url rails

Ich lade meine Bilder mit image_tag.

Kann jemand mir bitte helfen, auf diesem:

Production.rb:

config.action_controller.asset_host = AssetsCdn.new 
    config.action_mailer.asset_host = AssetsCdn.new 


config.action_mailer.default_url_options = { :host => 'localhost', :protocol => 'http' } 
config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = false config.action_mailer.default :charset => "utf-8" 
config.action_mailer.delivery_method = :smtp #:mailhopper 

AssetsCdn Klasse:

require 'zlib' 
class AssetsCdn 
    CSS_CDN = "cdn-css" 
    CSS_CDN_0 = "cdn-css0" 
    CSS_CDN_1 = "cdn-css1" 
    CSS_CDN_2 = "cdn-css2" 

    JS_CDN = "cdn-js" 
    JS_CDN_0 = "cdn-js0" 
    JS_CDN_1 = "cdn-js1" 
    JS_CDN_2 = "cdn-js2" 

    ASSETS_CDN = "cdn-assets" 
    ASSETS_CDN_0 = "cdn-assets0" 
    ASSETS_CDN_1 = "cdn-assets1" 
    ASSETS_CDN_2 = "cdn-assets2" 
    ALL = [CSS_CDN_0, CSS_CDN_1, CSS_CDN_2, JS_CDN_0, JS_CDN_1, JS_CDN_2, ASSETS_CDN_0, ASSETS_CDN_1, ASSETS_CDN_2] 

    def call(source, request = nil) 
    cdn_index = Zlib.crc32(source) % 3 
    if source.ends_with?('.css') 
     url("#{CSS_CDN}#{cdn_index}", request) 
    elsif source.ends_with?('.js') 
     url("#{JS_CDN}#{cdn_index}", request) 
    else 
     url("#{ASSETS_CDN}#{cdn_index}", request) 
    end 
    end 

    def url(cdn_subdomain, request = nil) 
     return "//#{cdn_subdomain}-#{localhost}:3000" 
    end 
end 

TIA.

+0

@spickermann Ich verwende eine Klasse, um dynamische URLs für meine js, css und Bilddateien zu generieren. In production.rb erstelle ich also ein Objekt für diese Klasse. In Ansichten und alles funktioniert gut. aber in E-Mails wird nicht geliefert. Ich bekomme in E-Mails keinen Link zu diesem Bild. leeres Bild-Tag zeigt – anusha

+0

@spickermann: 'Logo' wie das ich bekomme Bild in E-Mail – anusha

+0

@spickermann Ich rufe diese Klasse in prodcution.rb wie angenommen, dass Klassenname AssetsCDN ist, verwende ich dies: 'config.action_mailer. asset_host = AssetsCDN.new'. Da wir URLs mit Pfaden von Bildern generieren – anusha

Antwort

1

action_mailer.assets_host akzeptiert keine Protokoll-URLs. Stattdessen müssen URLs mit einem Protokoll wie http:// oder https:// beginnen.

Das macht Sinn, weil E-Mails in der Regel nicht in einem Browser geöffnet werden und E-Mail-Clients nicht in der Lage sind, das Protokoll von einem Patent-HTML-Dokument wie Browser zu übernehmen.