Ruby on rails 有没有办法在开发中设置config.action\u controller.asset\u主机

Ruby on rails 有没有办法在开发中设置config.action\u controller.asset\u主机,ruby-on-rails,Ruby On Rails,在my production.rb中,我将我的asset_主机设置为CloudFront,如下所示: config.action_controller.asset_host = 'http://xxxxxxxx.cloudfront.net' 现在我发现,在某些情况下(具体来说,输出JavaScript以嵌入到另一个站点),我也需要在开发环境中设置asset_主机,默认的null不会将其删除。理想情况下,我想设置: config.action_controller.asset_host = '

在my production.rb中,我将我的asset_主机设置为CloudFront,如下所示:

config.action_controller.asset_host = 'http://xxxxxxxx.cloudfront.net'
现在我发现,在某些情况下(具体来说,输出JavaScript以嵌入到另一个站点),我也需要在开发环境中设置asset_主机,默认的null不会将其删除。理想情况下,我想设置:

config.action_controller.asset_host = 'http://localhost:3000'
但是这个端口不能保证,我不愿意硬编码。有没有办法将asset_host设置为当前域和端口


谢谢

此值在启动期间可用,可能有助于:

Rails::Server.new.options[:Port]
尝试将其添加到development.rb文件的asset_host变量中


基于这个答案:

您可以使用环境变量或Rails初始值设定项参数

config.action_controller.asset_host = ENV[ASSET_HOST].empty? ? 'http://' + Rails::Server.new.options[:Host] + ':' + Rails::Server.new.options[:Port] : ENV[ASSET_HOST]
如果您设置了环境变量,则使用该地址,否则将使用默认地址。

尝试:

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
class ApplicationController
在Rails 4中,我们将动态资产主机设置与程序一起使用:

# 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

此代码确保来自localhost:3000、localhost:8080127.0.0.1:3000、local.dev和任何其他设置的请求正常工作。

很酷,但仍然是硬编码的。在这个上下文中,我们可以访问请求对象,Rails::Server.new.options散列就是我想要的答案。谢谢这是一个有用的散列。谢谢,这解决了我想用相同的配置同时支持HTTP和HTTPS开发环境的问题。