web-dev-qa-db-ja.com

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

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' }

しかし、それも動作しません。

Web上ではActionMailerに関連している可能性がありますが、設定する必要があるものがわかりません。あなたのアイデアに感謝します!

編集済み:

こんにちは、

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 => "[email protected]", :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'
174
benoitr

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

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

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


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

Herokuにプッシュする場合、herokuサブドメインでenvironment.rbファイルを構成する必要があります。

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

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

237
thenengah

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をプッシュします。うまくいくはずです。

37
benoitr

上記の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
22
Ross

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' }
18
Mike

production環境で動作させるために多くのことをしなければなりませんでした: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 4およびDevise

13
maudulus

考慮すべきトリックを次に示します。サーバーと環境の切り替え、およびherokuのカスタムドメインのようにドメインの変更が簡単になります。

ホスト名をハードコーディングする代わりに、リクエストから読み取ります。これが私が持っているシンプルなアプリの例です。

class MyMailController < ApplicationController
  before_filter :set_Host_from_request, only: [:create]

  ....   

  private
  def set_Host_from_request
    ActionMailer::Base.default_url_options = { Host: request.Host_with_port }
  end
end

単純な例では、作成されるアクションが1つだけで、その結果、メールが送信されます。除外なしでapplication_controller.rbにbefore_filterを追加して、常にホスト名を保存することができます。

プロ:

  • 送信するメールのURLで常に正しいホスト名を取得する
  • ステージングサーバーでdefault_url_optionsをproductionに設定すると、本番へのリンクを持つテストユーザーにメールが送信されます(もちろんクリックします)。損傷はありませんが、非常に時間がかかります。

CON:

default_url_optionsなしでは、コンソールで手動で送信できません

#config.action_mailer.default_url_options = { :Host => 'mydomain.com' }
$Rails console
  User.invite!(email: "[email protected]")
ActionView::Template::Error: Missing Host to link to! Please provide the :Host parameter, set default_url_options[:Host], or set :only_path to true
...stacktrace

あなたが私にできない欠点を見ることができるならば、共有してください!ありがとう

7
oma

非常に多くの研究の後、働くもの、

  1. デフォルトを追加することを忘れないでくださいfrom:mailアドレス(ApplicationMailer(application_mailer.rb)as、

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      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:            '[email protected]',
      password:             'yourgmailpassword',
      authentication:       'login',
      enable_starttls_auto: true
    }
    
  3. IMAP/POP転送タブのGmail設定からIMAPを有効にします。

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

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

0
Anshab M K