Estou pesquisando no Google há cerca de 90 minutos e ainda não tenho uma resposta para isso. Onde eu coloco default_url_options
? Eu já o configurei para config.action_mailer.default_url_options
resolver esse mesmo bug em outro lugar, mas agora estou recebendo esse erro ao tentar usar um auxiliar de URL dentro de uma especificação do RSpec. Não tenho idéia de onde ele espera que default_url_options seja definido.
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)>'
Esse código não tem nada a ver com e-mails / ActionMailer, apenas precisa de um URL em vez de um caminho.
Alguma ideia?
ruby-on-rails
rspec
d11wtq
fonte
fonte
Respostas:
Você precisa adicionar a seguinte linha em todos os ambientes:
config.action_mailer.default_url_options = { :host => "yourhost" }
Dessa forma, ele pode funcionar em todos os ambientes e pode ser diferente de ambiente para ambiente. Por exemplo:
development.rb
test.rb
production.rb
fonte
default_url_options Rails.application.config.action_mailer.default_url_options
embora e que fez o truque, como sugerido por outro comentaristaEm algum lugar em
routes.rb
:)fonte
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(é claro, substitua o nome de domínio correto por cada ambiente). Então,routes.rb
eu estou livre para usardefault_url_options host: Rails.application.config.domain
e funcionará em qualquer ambiente. De nada.default_url_options Rails.application.config.action_mailer.default_url_options
.O host deve ser especificado no arquivo de configuração de cada ambiente. Por exemplo:
Veja esta pergunta e esta pergunta .
fonte
Defina
default_url_options
para usar o seuaction_mailer.default_url_options
.Em cada um dos seus arquivos de ambiente (por exemplo
development.rb
,production.rb
, etc.) você pode especificar odefault_url_options
use paraaction_mailer
:No entanto, eles não estão definidos para
MyApp:Application.default_url_options
:É por isso que você está recebendo esse erro em qualquer coisa fora dele
ActionMailer
.Você pode configurar seu aplicativo é
default_url_options
usar o que você definiu paraaction_mailer
no arquivo de ambiente adequado (development.rb
,production.rb
, etc.).Para manter o mais seco possível, faça isso no seu
config/environment.rb
arquivo, para fazer isso apenas uma vez:Agora, quando você inicializar seu aplicativo, todo o seu aplicativo
default_url_options
corresponderá ao seuaction_mailer.default_url_options
:Dica de chapéu para @pduersteler por me levar por esse caminho.
fonte
config/environment.rb
que você descreveu foi a chave para fazer meu mailer funcionar no console. Obrigado!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
para o Rails 5.2+ #Quando você usa qualquer
listing_url
método, o URL completo será retornado (não um relativo, como normal). É por isso que o Rails está solicitando o host para calcular a URL inteira.Como você pode dizer aos trilhos o host? Você pode fazer isso de várias maneiras:
1.Adicionando esta opção a cada ambiente:
NOTA: Se você estiver trabalhando dentro de um mecanismo de trilhos, lembre - se de fazer o mesmo com seu aplicativo fictício dentro dos testes de mecanismo:
path_to_your_engine/test/dummy/config/environments/*
porque quando você testa o mecanismo, é contra isso que os trilhos estão testando.2. Adicione a opção de host ao método foo_url da seguinte maneira:
Saída 3.Não o anfitrião com a opção
:only_path to true
.IMHO Eu não vejo o ponto neste, porque neste caso eu usaria o
listing_path
métodofonte
Engraçado, essa configuração
config.action_mailer.default_url_options
não ajuda para mim. Além disso, mexer com configurações independentes do ambiente em lugares que eu senti que não pertencem não foi satisfatório para mim. Além disso, eu queria uma solução que funcionasse ao gerar URLs em trabalhadores sidekiq / resque.Minha abordagem até agora, que aborda
config/environments/{development, production}.rb
:Isso funciona para mim em trilhos> = 3.2.x.
fonte
config/environment.rb
arquivo para fazer isso. E uma resposta adicionada que entra em detalhes: stackoverflow.com/a/48529627/293280 Obrigado por me indicar nessa direção.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
No developemnt.rb / test.rb, pode ser mais conciso da seguinte maneira:
fonte
Você sempre pode passar o host como um parâmetro para o auxiliar de URL:
fonte
listing_url(listing, host: request.host, port: 3000)
Você pode definir opções de URL padrão no Application Controller:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
fonte
Eu tive esse mesmo erro. Escrevi tudo corretamente, incluindo a Listagem 10.13 do tutorial.
obviamente com "example.com" substituído pelo meu URL do servidor.
O que eu havia encoberto no tutorial era esta linha:
Portanto, a resposta para mim foi desligar e ligar novamente o servidor.
fonte
vá para config / environment / test.rb
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
fonte
apenas no caso de alguém encontrar isso procurando erros relacionados ao ActiveStorage:
se você tiver uma ação de controlador na qual deseja gerar URLs de upload, etc, com o serviço de disco local (provavelmente no ambiente de teste), precisará
include ActiveStorage::SetCurrent
do controlador para permitirblob.service_url_for_direct_upload
que funcione corretamente.fonte
Adicionar o default_url em rotas não é a solução certa, embora funcione em alguns casos.
Você deve definir o default_url em cada ambiente (desenvolvimento, teste, produção).
Você precisa fazer essas alterações.
fonte
Resolvi o problema configurando o environment.rb como
YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options
Você precisa definir default_url_options para o mailer de ação em cada ambiente, como desenvolvimento, teste, preparo e produção, etc.
Referência: Host ausente para o link! Forneça: parâmetro do host ou defina default_url_options [: host]
fonte
A resposta acima não funcionou para mim, pelo menos não como eu queria. Eu percebi
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
depois de instalar o dispositivo. Espero que ajude alguém com o mesmo problema.fonte