私は約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が必要になるだけです。
何か案は?
Your::Application.routes.draw do
default_url_options :Host => "example.com"
# ... snip ...
end
routes.rb
のどこかに:)
すべての環境で次の行を追加する必要があります。
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" }
default_url_options
を使用するようにaction_mailer.default_url_options
を設定します。各環境ファイル(例:development.rb
、production.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_options
、action_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_options
がaction_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 で私をこの道に導きます。
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
メソッドを使用するので、これに関するポイントが表示されません
面白いことに、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で機能します。
いつでもHostをパラメーターとしてURLヘルパーに渡すことができます。
listing_url(listing, Host: request.Host)
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
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
これと同じエラーが発生しました。チュートリアルのリスト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に置き換えられていることは明らかです。
チュートリアルで私が説明したのは、次の行です。
開発サーバーの再起動後、構成をアクティブにします...
したがって、私にとっての答えは、サーバーの電源をオフにしてから再びオンにすることでした。
config/environments/test.rbに移動します
Rails.application.routes.default_url_options [:Host] = 'localhost:3000'
ルートに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'