2013-05-09 1 views
7

にセットconfig.action_controller.asset_hostを設定することが方法です:が私のproduction.rbで開発

config.action_controller.asset_host = 'http://xxxxxxxx.cloudfront.net' 

は、今私は、特に(いくつかの状況でそれを見つけることです別のサイトに埋め込むJavaScriptを出力する)私は開発環境でもasset_hostを設定する必要がありますが、デフォルトのnullはそれをカットしません。理想的には私は設定したい:

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

が、このポートは保証できません、と私はハードコードそれに消極的です。 asset_hostを現在のドメインとポートに設定する方法はありますか?

ありがとうございます!

答えて

5

:この回答に基づいて

+0

Rails :: Server.new.optionsハッシュは、私が探していた答えでした。ありがとう! – superluminary

+0

それは知っておくと便利なハッシュです。 – superluminary

3

この値は、起動時に利用可能であり、役立つかもしれない:あなたのdevelopment.rbファイルのasset_host変数に加えること

Rails::Server.new.options[:Port] 

してみてください。あなたは、あなたがそのアドレスを使用して環境変数を設定した場合、それ以外の場合はデフォルトを使用します、環境変数やRailsの初期化パラメータ

config.action_controller.asset_host = ENV[ASSET_HOST].empty? ? 'http://' + Rails::Server.new.options[:Host] + ':' + Rails::Server.new.options[:Port] : ENV[ASSET_HOST] 

するこの方法を利用することができますhttps://stackoverflow.com/a/13839447/1882605

0

試してみてください。私たちはPROCで設定asset_hostダイナミックを使用Railsの4では

class ApplicationController < ActionController::Base 
before_filter :find_asset_host 

private 

    def find_asset_host 
    ActionController::Base.asset_host = Proc.new { |source| 
     if Rails.env.development? 
      "http://localhost:3000" 
     else 
      {} 
     end 
     }  
    end 
+0

涼しいですが、まだハードコードされています。上に、このコンテキストでリクエストオブジェクトにアクセスできます。 – superluminary

+0

configに "http:// localhost:3000"を格納し、その値をここに引き出すことができます。 –

1

:3000、localhostを:8080、127.0.0.1

# in /config/environments/development.rb 

Rails.application.configure do 
    config.action_controller.asset_host = Proc.new { |source, request| 
    # source = "/assets/brands/stockholm_logo_horizontal.png" 
    # request = A full-fledged ActionDispatch::Request instance 

    # sometimes request is nil and everything breaks 
    scheme = request.try(:scheme).presence || "http" 
    host = request.try(:host).presence || "localhost:3000" 
    port = request.try(:port).presence || nil 

    ["#{scheme}://#{host}", port].reject(&:blank?).join(":") 
    } 

    # more config 
end 

このコードは、ローカルホストからのリクエストことを保証します:3000、local.devと他の設定だけで動作します。

関連する問題