Herokuでアプリをプッシュしようとしています。私はまだ開発中です。確認可能なモジュールでdeviseを使用します。
Herokuコンソールでユーザーを追加しようとすると、次のエラーが表示されました。
Missing Host to link to! Please provide :Host parameter or set default_url_options[:Host]
テストおよび開発環境では、次の行があります。
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'
コンソールで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'
これを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
に入れます。
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をプッシュします。うまくいくはずです。
上記の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
Cedarで実行している場合:
コンソールからheroku addons:add sendgrid:free
を実行します。
アプリの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' }
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
考慮すべきトリックを次に示します。サーバーと環境の切り替え、および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を追加して、常にホスト名を保存することができます。
プロ:
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
あなたが私にできない欠点を見ることができるならば、共有してください!ありがとう
非常に多くの研究の後、働くもの、
デフォルトを追加することを忘れないでくださいfrom:mailアドレス(ApplicationMailer(application_mailer.rb)as、
class ApplicationMailer < ActionMailer::Base
default from: '[email protected]'
layout 'mailer'
end
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
}
IMAP/POP転送タブのGmail設定からIMAPを有効にします。
安全性の低いアプリの許可:ONfrom https://myaccount.google.com/lesssecureapps
これで準備完了です。 :)