web-dev-qa-db-ja.com

リンクするホストがありません! :Hostパラメーターを指定するか、default_url_options [:Host]を設定してください

私は約90分間グーグル検索を行っていますが、これに対する答えはまだありません。 default_url_optionsはどこで設定しますか?他の場所で同じバグを解決するためにconfig.action_mailer.default_url_optionsに設定済みですが、RSpec仕様内でURLヘルパーを使用しようとするとこのエラーが発生します。 default_url_optionsが設定されることを期待している場所がわかりません。

 Failure/Error: listing_url(listing).should match(/\/\d+-\w+$/)
 RuntimeError:
   Missing Host to link to! Please provide :Host parameter or set default_url_options[:Host]
 # ./spec/routing/listing_routing_spec.rb:9:in `block (3 levels) in <top (required)>'

このコードはemails/ActionMailerとは関係ありません。パスではなくURLが必要になるだけです。

何か案は?

167
d11wtq
Your::Application.routes.draw do
  default_url_options :Host => "example.com"

  # ... snip ...
end

routes.rbのどこかに:)

64
d11wtq

すべての環境で次の行を追加する必要があります。

config.action_mailer.default_url_options = { :Host => "yourhost" }

そうすれば、すべての環境で機能し、環境ごとに異なる可能性があります。例えば:

development.rb

config.action_mailer.default_url_options = { :Host => "dev.yourhost.com" }

test.rb

config.action_mailer.default_url_options = { :Host => "test.yourhost.com" }

production.rb

config.action_mailer.default_url_options = { :Host => "www.yourhost.com" }
243
Carlos Castillo

ホストは各環境の構成ファイルで指定する必要があります。例えば:

config/environments/development.rb

この質問 および この質問 を参照してください。

39
nickh

default_url_optionsを使用するようにaction_mailer.default_url_optionsを設定します。

各環境ファイル(例:development.rbproduction.rbなど)では、default_url_optionsに使用するaction_mailerを指定できます。

config.action_mailer.default_url_options = { Host: 'lvh.me', port: '3000' }

ただし、これらはMyApp:Application.default_url_optionsには設定されていません。

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:Host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {}

そのため、ActionMailer以外の場所でエラーが発生します。

適切な環境ファイル(default_url_optionsaction_mailerなど)でdevelopment.rbに定義したものを使用するように、アプリケーションのproduction.rbを設定できます。

できる限りDRYに保つには、config/environment.rbファイルでこれを行います。これを行うのは1回だけです。

# Initialize the Rails application
MyApp::Application.initialize!

# Set the default Host and port to be the same as Action Mailer.
MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options

これで、アプリを起動すると、アプリケーション全体のdefault_url_optionsaction_mailer.default_url_optionsと一致します。

$ MyApp::Application.config.action_mailer.default_url_options
#=> {:Host=>"lvh.me", :port=>"3000"}

$ MyApp::Application.default_url_options
#=> {:Host=>"lvh.me", :port=>"3000"}

@ pduersteler で私をこの道に導きます。

27
Joshua Pinter

listing_urlメソッドを使用すると、完全なURLが返されます(通常の相対URLではありません)。そのため、RailsがURL全体を計算するためにホストを要求しています。

Railsホストにどのように伝えることができますか?それにはいくつかの方法があります。

1。各環境にこのオプションを追加:

[/config/development.rb]
config.action_mailer.default_url_options = { Host: "localhost:3000" }
[/config/test.rb]
config.action_mailer.default_url_options = { Host: "localhost:3000" }
[/config/production.rb]
config.action_mailer.default_url_options = { Host: "www.example.com" }

注:Railsエンジンの内部で作業している場合エンジンのテスト:path_to_your_engine/test/dummy/config/environments/*は、エンジンをテストするときにRailsがテストするものだからです。

2.Hostオプションをfoo_urlメソッドに次のように追加します:

listing_url(listing, Host: request.Host) # => 'http://localhost:3000/listings/1'

3。オプション:only_path to trueでホストを出力しません。

listing_url(listing, only_path: true ) # => '/listings/1'   

私見私はこの場合、私はlisting_pathメソッドを使用するので、これに関するポイントが表示されません

24
ivanxuu

面白いことに、config.action_mailer.default_url_optionsを設定しても役に立たない。また、環境に依存しない設定が自分のものではないと感じた場所をいじることは、私にとって満足のいくものではありませんでした。さらに、sidekiq/resqueワーカーでURLを生成するときに機能するソリューションが必要でした。

これまでの私のアプローチは、config/environments/{development, production}.rbになります。

MyApp::Application.configure do
    # Stuff omitted...

    config.action_mailer.default_url_options = {
      # Set things here as usual
    }
end

MyApp::Application.default_url_options = MyApp::Application.config.action_mailer.default_url_options

これはRails> = 3.2.xで機能します。

14
pduersteler

いつでもHostをパラメーターとしてURLヘルパーに渡すことができます。

listing_url(listing, Host: request.Host)
6
Undistraction

Rails.application.routes.default_url_options[:Host]= 'localhost:3000'

Development.tb/test.tbでは、次のように簡潔にすることができます。

Rails.application.configure do
  # ... other config ...

  routes.default_url_options[:Host] = 'localhost:3000'
end
5
Derek Fan

Application ControllerでデフォルトのURLオプションを設定できます。

class ApplicationController < ActionController::Base
  def default_url_options
    {:locale => I18n.locale}
  end
end

http://guides.rubyonrails.org/action_controller_overview.html#default_url_options

3
RicRoberts

これと同じエラーが発生しました。チュートリアルのリスト10.13を含め、すべてを正しく記述しました。

Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delevery_method :test
Host = 'example.com'
config.action_mailer.default_url_options = { Host: Host }
.
.
.
end

「example.com」がサーバーのURLに置き換えられていることは明らかです。

チュートリアルで私が説明したのは、次の行です。

開発サーバーの再起動後、構成をアクティブにします...

したがって、私にとっての答えは、サーバーの電源をオフにしてから再びオンにすることでした。

1
Okomikeruko

config/environments/test.rbに移動します

Rails.application.routes.default_url_options [:Host] = 'localhost:3000'

1
milad rahmani

ルートにdefault_urlを追加するのは適切なソリューションではありませんが、場合によっては機能します。

各環境(開発、テスト、本番)でdefault_urlを設定する必要があります。

これらの変更を行う必要があります。

    config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :Host => 'your-Host-name' }  #if it is local then 'localhost:3000'

 config/environments/test.rb
      config.action_mailer.default_url_options = 
      { :Host => 'your-Host-name' }  #if it is local then 'localhost:3000'

  config/environments/development.rb
     config.action_mailer.default_url_options = 
      { :Host => 'your-Host-name' }  #if it is local then 'localhost:3000'
0
Prabhakar