2013-05-09 242 views
7

在我production.rb集config.action_controller.asset_host我我asset_host设置为CloudFront的,像这样:有没有办法来设置开发

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

现在我发现,在某些情况下(具体而言,输出要嵌入到另一个站点的JavaScript)我也需要在开发环境中设置asset_host,默认的null不会削减它。理想情况下,我想设置:

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

但这个端口不能保证,我不愿意硬编码它。有没有办法将asset_host设置为当前的域和端口?

谢谢!

回答

5

您可以使用环境变量或者Rails初始化参数

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

这样的,如果你设置环境变量您使用的地址,否则它会使用默认。

+0

Rails :: Server.new.options哈希是我正在寻找的答案。谢谢! – superluminary 2013-05-20 09:51:54

+0

这是一个有用的哈希知道。 – superluminary 2013-05-20 09:56:09

3

此值是在启动过程中可用的,并且可能帮助:

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

尝试将其添加到您的development.rb文件的asset_host变量。

基于这样的回答:https://stackoverflow.com/a/13839447/1882605

0

尝试:

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 2013-05-20 09:50:53

+0

您可以在配置中存储“http:// localhost:3000”,并在此处取值。 – 2013-05-20 14:10:00

1

在Rails 4中,我们使用动态asset_host用PROC设置:

# 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为localhost:8080,127.0.0.1 :3000,local.dev和任何其他设置工作。

相关问题