web-dev-qa-db-ja.com

RailsのURLヘルパーのデフォルトホストを設定するにはどうすればよいですか?

このようなことをしたい

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

一部の構成ファイルで、object_urlヘルパー(ActionView::Helpers::UrlHelperhttp://www.subdomain.example.com で始まるリンクを作成します

私はドキュメントを検索しようとしましたが、ActionMailerドキュメントと http://api.rubyonrails.org/classes/Rails/Configuration.html 以外は何も見つかりませんでしたが、これは役に立ちません私にとって、どのパットを見るべきかわからないからです。 Rails :: Initializer.configの構造全体を説明する場所はありますか?

61
gorn

asset_HostはURLでは機能しません

ApplicationControllerdefault_url_optionsをオーバーライドする必要があります(少なくともRails 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
52
Wilhelm

環境設定でデフォルトのホストを定義します。

# 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'
48
Andrew

別の方法は、このように設定することです

# config/production.rb
config.action_controller.default_url_options = { Host: 'myproduction.com' }
29
goma

Url_helperごとに_:Host_または/および_:only_path_パラメーターを簡単に設定できます。 yours_url(params, :Host => "http://example.com", :only_path => Rails.env.test?)この方法では、必要でない限り、グローバルなdefault_url_optionsを環境に設定しません。

3
NStojanovic

私の知る限り、*_urlヘルパーは、サーバーの構成済みのホスト名を使用します。たとえば、Apacheインストールがこのリクエストを受け入れている場合、Rails app at http://www.myapp.com/ then Railsはそのアドレスを使用します。だから*_url開発環境のメソッドはhttp://localhost:3000デフォルトでは。

前の回答で提案されたアセットホストは、image_tagstylesheet_link_tagおよびjavascript_link_tagヘルパー。

0
Robert Speicher