Heroku / devise - Host ausente para o link! Forneça: parâmetro do host ou defina default_url_options [: host]

178

Estou tentando empurrar meu aplicativo no heroku. Eu ainda estou no dev. Eu uso o dispositivo com o módulo verificável.

Quando tento adicionar um usuário ao console heroku, recebi este erro:

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

No ambiente de teste e desenvolvimento, tenho a seguinte linha:

ambientes / development.rb e ambientes / test.rb

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

Não configurei algo no ambiente de produção.

Eu tentei empurrar com

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

mas também não funciona ..

Vejo na web que isso pode estar relacionado ao ActionMailer, mas não sei o que tenho que configurar. Muito obrigado pela sua ideia!

EDITADO:

Oi,

Para não travar meu aplicativo quando pressiono o heroku, coloquei isso no meu env / test.rb e no meu env / dev.rb (não no env.rb, acho que é porque é um aplicativo do Rails 3)

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

Mas quando tentei criar um usuário no console heroku:

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

aqui estão os erros que eu tenho:

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'

EDITADO (2)

Quando digito os logs do heroku no console, obtive isso ==> production.log <== Então, acho que quando alguém implanta no heroku, ele já está em produção.

Eu configuro o env / prod.rb assim:

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

e agora tenho isso como erro ao tentar criar um usuário:

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'
benoitr
fonte

Respostas:

243

Você precisa adicionar isso ao seu environment.rb

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

Altere hostseu URL de produção e mantenha-o no host local para desenvolvimento. Isto é para o remetente, ele precisa de um email padrão para enviar avisos como confirmações, etc ...


Você deve verificar se os logs no servidor heroku heroku logsexecutam isso no console e ele informa o erro exato.

Ao enviar para heroku, você precisa configurar o environment.rbarquivo com o subdomínio heroku:

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

Dependendo da versão, isso deve entrar production.rb, não environment.rb.

thenengah
fonte
Oi sam! Sinto muito, mas eu não entendi. Acabei de adicionar a linha config.action_mailer.default_url_options = {: host => 'localhost'} no meu env.rb, mas meu aplicativo Rails 3 trava no heroku. Eu tive que colocar algo no env / prod.rb também? (desculpe meu inglês é tão mais ou menos ..)
benoitr
Além disso, eu tive que colocar meu aplicativo rails no modo de produção? Obrigado!
benoitr
1
:host => 'yourapp.heroku.com' esse deve ser o seu domínio. Por exemplo, se seu domínio é yahoo.com, deve ser yahoo.heroku.comou se você já configurou domínios personalizados, será apenas o seu URLyahoo.com
thenengah
1
Obrigado Sam, acho a solução. O fato é que eu não tinha o addgrid addgrid e meu smtp não configurou. Muito obrigado por todo o seu backup!
benoitr
1
Não será config.action_mailer.default_url_options = { :host => 'yourapp.herokuapp.com', ao contrário de apenas config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com'?
Maudulus
37

Está bem,

Primeiro você precisa instalar a gem sendgrid com esta linha de comando:

heroku addons:add sendgrid:free

Então você só precisa configurar seu env / dev.rb e env / prod.rb assim:

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

Empurre o git e o heroku. Deveria funcionar ..

benoitr
fonte
Eu recebo esse erro quando faço referência ao config.action_mailer em production.rb: /app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/ rails / railtie / configuration.rb: 77: in method_missing': undefined method action_mailer' for # <Rails:: Aplicação :: Configuração: 0x0000000241f760> (NoMethodError)
Laran Evans
Não tenho certeza de que posso ajudar aqui ... Você o referenciou dentro do bloco? (Site :: Application.configure do ... config.action_mailer.default_url_options = {: host => 'yourapp.heroku.com'} ... final)
benoitr
6
agora o comando sendgrid é Heroku complementos: add sendgrid: arranque (detalhes de uso vista em devcenter.heroku.com/articles/sendgrid )
Danny
23

A resposta de Codeglot acima faz o trabalho, mas queríamos algo um pouco mais flexível, então fizemos o seguinte:

No Heroku, executamos vários ambientes de produção para preparo e teste, portanto, precisamos de uma solução flexível para o arquivo de ambiente production.rb.

Em production.rb

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

Em seguida, defina a variável de ambiente MAILER_URL para seu aplicativo da seguinte maneira

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

Se você estiver executando o Cedar :

  1. executar a heroku addons:add sendgrid:freepartir do seu console.

  2. Adicione as seguintes linhas config/environments/production.rbno seu aplicativo.

.

  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' }
Mike
fonte
13

Eu tive que fazer várias coisas para fazê-lo funcionar no ambiente de produção : Dentro do meu production.rbarquivo (/config/environments/production.rb), adicionei o seguinte:

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"

Isso ocorre com o Rails 4 e o Devise 3

maudulus
fonte
1
Essa estrutura default_url_optionscausou um erro que fez meus recursos de pré-compilação falharem, apenas para sua informação. Quando eu mudei de volta para `= {host: 'myappsname.herokuapp.com'}` `funcionou.
Liz
0

O trabalho depois de tantas pesquisas,

  1. Não se esqueça de adicionar o endereço padrão de: mail no ApplicationMailer (application_mailer.rb) como,

    class ApplicationMailer < ActionMailer::Base
      default from: '[email protected]'
      layout 'mailer'
    end
  2. Adicione a configuração abaixo em seu 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. Ative o IMAP nas configurações do Gmail na guia Encaminhamento IMAP / POP .

  4. Permitir aplicativos menos seguros: ATIVADO em https://myaccount.google.com/lesssecureapps

Agora você está pronto para ir. :)

Anshab MK
fonte