programing tip

Rails에서 URL 헬퍼에 대한 기본 호스트를 어떻게 설정합니까?

itbloger 2020. 12. 1. 07:43
반응형

Rails에서 URL 헬퍼에 대한 기본 호스트를 어떻게 설정합니까?


나는 이와 같은 것을하고 싶다

config.default_host = 'www.subdomain.example.com'

내 구성 파일 중 일부에서 object_url도우미 ( ActionView::Helpers::UrlHelper)가 http://www.subdomain.example.com으로 시작하는 링크를 생성하도록합니다 .

나는 문서를 검색하려고 시도했지만 ActionMailer문서와 http://api.rubyonrails.org/classes/Rails/Configuration.html제외하고는 아무것도 찾지 못했습니다. . Rails :: Initializer.config의 전체 구조를 설명하는 곳이 있나요?


asset_host URL에서 작동하지 않습니다

당신은 오버라이드 (override) 할 필요가 default_url_optionsApplicationController(적어도 레일 3에서)

http://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

class ApplicationController < ActionController::Base
  def default_url_options
    if Rails.env.production?
      {:host => "myproduction.com"}
    else  
      {}
    end
  end
end

환경 구성에서 기본 호스트를 정의하십시오.

# config/environments/staging.rb
MyApp::Application.configure do
  # ...
  Rails.application.routes.default_url_options[:host] = 'preview.mydomain.com'
  # ...
end

그런 다음 앱 어디에서나 URL을 만들 수 있습니다.

Rails.application.routes.url_helpers.widgets_url()

또는 수업에 URL 도우미를 포함합니다.

class MyLib
  include Rails.application.routes.url_helpers

  def make_a_url
    widgets_url
  end
end

기본 호스트를 정의하지 않은 경우 옵션으로 전달해야합니다.

widgets_url host: (Rails.env.staging? ? 'preview.mydomain.com' : 'www.mydomain.com')

프로토콜과 같은 것을 지정하는 것도 유용합니다.

widgets_url protocol: 'https'

또 다른 방법은 이렇게 설정하는 것입니다

# config/production.rb
config.action_controller.default_url_options = { host: 'myproduction.com' }

모든 url_helper에 대해 :host또는 / 및 :only_path매개 변수를 쉽게 설정할 수 있습니다 . yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?) 이렇게하면 원하는 경우가 아니면 환경에서 전역 default_url_options를 설정하지 않습니다.


내가 아는 한 *_url헬퍼는 서버의 구성된 호스트 이름을 사용합니다. 예를 들어 Apache 설치가이 Rails 앱에 대한 요청을 수락 http://www.myapp.com/하면 Rails가 해당 주소를 사용합니다. 이것이 *_url개발 환경 메서드 http://localhost:3000가 기본적으로 가리키는 이유 입니다.

이전 답변에서 제안한 자산 호스트는 image_tag, stylesheet_link_tagjavascript_link_tag도우미 에만 영향을 미칩니다 .


Rails의 전역 변수를 사용하여 동적 도메인 URL을 얻는 가장 간단한 방법입니다.

class ApplicationController < ActionController::Base
  def base_url       
    $base_url = request.base_url
  end

end

이 메소드를 헤더 파일에 호출하면 <% base_url %>이제 애플리케이션의 어느 곳에서나 도메인 URL에 액세스 할 수 있습니다.


NSD의 솔루션은 내가하는 방법이지만 https에서 작동하도록 블록을 추가해야했습니다.

config.action_controller.asset_host = Proc.new { |source, request|
  (request ? request.protocol : 'http://') +  "www.subdomain.example.com"
}

이것이 있지만 그들이 당신이 언급하는 도우미인지별로 확신하지 못합니다.

ActionController::Base.asset_host = "assets.example.com"

http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html

참고 URL : https://stackoverflow.com/questions/2660172/how-do-i-set-default-host-for-url-helpers-in-rails

반응형