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


178

アプリをherokuにプッシュしようとしています。私はまだ開発中です。確認可能なモジュールでdeviseを使用します。

herokuコンソールでユーザーを追加しようとすると、次のエラーが発生しました。

Missing host to link to! Please provide :host parameter or set default_url_options[:host]

テストおよび開発環境では、次の行があります。

environment / development.rbおよびenvironments / test.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

実稼働環境には何も設定していません。

私はプッシュしようとしました

config.action_mailer.default_url_options = { :host => 'mywebsitename.com' }
config.action_mailer.default_url_options = { :host => 'heroku.mywebsitename.com' }

しかし、それも機能しません。

ActionMailerに関連している可能性があることをWebで確認しましたが、何を設定する必要があるのか​​わかりません。あなたのアイデアに感謝します!

編集:

こんにちは、

herokuをプッシュしたときにアプリがクラッシュしないようにするために、これをenv / test.rbとenv / dev.rbに入れました(env.rbではありません。これはRails 3アプリだからです)

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

しかし、herokuコンソールでユーザーを作成しようとしたとき:

User.create(:username => "test", :email => "test@test.com", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")

ここに私が得たエラーがあります:

ActionView::Template::Error: Missing host to link to! Please provide :host parameter or set default_url_options[:host]
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:473:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/url_for.rb:132:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_view/helpers/url_helper.rb:99:in `url_for'
/home/slugs/.../mnt/.bundle/gems/ruby/1.8/gems/actionpack-3.0.0/lib/action_dispatch/routing/route_set.rb:195:in `user_confirmation_url'

編集済み(2)

コンソールにherokuのログを入力すると、==> production.log <==が表示されるので、herokuにデプロイすると、すでに本番環境にあると思います。

私はこのようにenv / prod.rbを設定します:

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

そして今、私はユーザーを作成しようとするとエラーとしてこれがあります:

Errno::EAFNOSUPPORT: Address family not supported by protocol - socket(2)
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `initialize'
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `open'
/usr/ruby1.8.7/lib/ruby/1.8/net/smtp.rb:551:in `do_start'
/usr/ruby1.8.7/lib/ruby/1.8/timeout.rb:62:in `timeout'

回答:


243

これをあなたに追加する必要があります environment.rb

  config.action_mailer.default_url_options = { :host => 'localhost' }

必ずhost本番URLに変更し、開発用にローカルホストにしてください。これはメーラー用で、確認などの通知を送信するにはデフォルトのメールが必要です...


herokuサーバーのログを確認してheroku logs、コンソールから実行すると、正確なエラーが表示されます。

herokuにプッシュするときenvironment.rbは、herokuサブドメインを使用してファイルを構成する必要があります。

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

バージョンによっては、これはでproduction.rbはなくに入るはずenvironment.rbです。


こんにちは、サムさん!申し訳ありませんが、うまく聞き取れませんでした。config.action_mailer.default_url_options = {:host => 'localhost'}という行をenv.rbに追加するだけですが、rails 3アプリがherokuでクラッシュします。私もenv / prod.rbに何かを置く必要がありましたか?(申し訳ありませんが、私の英語は
まあまあ

また、railsアプリをプロダクションモードにする必要がありましたか?ありがとう!
benoitr 2010年

1
:host => 'yourapp.heroku.com' これはあなたのドメインでなければなりません。たとえば、ドメインがyahoo.comの場合は、それがそうであるyahoo.heroku.comか、すでにカスタムドメインを設定している場合は、それが単にURLになりますyahoo.com
thenengah

1
サムさん、解決策を見つけました。実際には、sendgridアドオンがなく、smtpが設定されていません。すべてのバックアップに感謝します!
benoitr 2010年

1
それだけではなく、そうなるのconfig.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com'ではないconfig.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'でしょうか?
モードル2014

37

OK、

まず、次のコマンドラインでsendgrid gemをインストールする必要があります。

heroku addons:add sendgrid:free

次に、env / dev.rbとenv / prod.rbを次のように構成するだけです。

env / dev.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

env / prod.rb

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }

gitとherokuをプッシュします。うまくいくはずです。


production.rbでconfig.action_mailerを参照すると、このエラーが発生します:/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb:77:in method_missing': undefined method #<Rails::Application :: Configuration:0x0000000241f760>に対するaction_mailer '(NoMethodError)
Evans

私がここで助けることができるかわかりません...あなたはブロックの中でそれを参照しましたか?(Website :: Application.configure do ... config.action_mailer.default_url_options = {:host => 'yourapp.heroku.com'} ... end)
benoitr

6
現在、sendgridコマンドはheroku addons:add sendgrid:starter(devcenter.heroku.com/articles/sendgridで使用法の詳細を表示
Danny

23

上記のCodeglotのanwserが機能しますが、もう少し柔軟なものを求めていたため、次のようにしました。

Herokuでは、ステージングとテストのために複数の本番環境を実行するため、production.rb環境ファイル用の柔軟なソリューションが必要です。

production.rb

config.action_mailer.default_url_options = { :host => ENV['MAILER_URL'] }

次に、アプリのMAILER_URL環境変数を次のように設定します

heroku config:set MAILER_URL=my-awesome-app.herokuapp.com --app my-awesome-app

18

Cedarで実行している場合:

  1. heroku addons:add sendgrid:freeコンソールから実行します。

  2. config/environments/production.rbアプリに次の行を追加します。

  ActionMailer::Base.smtp_settings = {
    :address        => 'smtp.sendgrid.net',
    :port           => '587',
    :authentication => :plain,
    :user_name      => ENV['SENDGRID_USERNAME'],
    :password       => ENV['SENDGRID_PASSWORD'],
    :domain         => 'heroku.com'
  }

  ActionMailer::Base.delivery_method = :smtp

  config.action_mailer.default_url_options = { :host => 'YOUR-DOMAIN-HERE.COM' }

13

実稼働環境で機能させるには、いくつかのことを実行する必要がありました。production.rbファイル(/config/environments/production.rb)の内部に、以下を追加しました。

Rails.application.routes.default_url_options[:host] = 'myappsname.herokuapp.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"

これはRails 4Devise 3の場合です


1
この構造がdefault_url_options原因でエラーが発生し、私のプリコンパイルアセットが失敗しました。それを `= {host: 'myappsname.herokuapp.com'}`に戻したところ、うまくいきました。
Liz

0

非常に多くの研究の後に働いて、

  1. デフォルトから追加することを忘れないでくださいApplicationMailer(application_mailer.rb)のメールアドレスとして、

    class ApplicationMailer < ActionMailer::Base
      default from: 'yourmail@gmail.com'
      layout 'mailer'
    end
  2. 以下の設定をproduction.rbに追加します。

    config.action_mailer.default_url_options = 
      { :host => 'yourapp.herokuapp.com' }
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      address:              'smtp.gmail.com',
      port:                 587,
      domain:               'heroku.com',
      user_name:            'yourmail@gmail.com',
      password:             'yourgmailpassword',
      authentication:       'login',
      enable_starttls_auto: true
    }
  3. [ IMAP / POPの転送 ]タブのGmail設定からIMAPを有効にします。

  4. 安全性の低いアプリを許可:https ://myaccount.google.com/lesssecureappsからON

これで準備完了です。:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.