Saya telah googling sekitar 90 menit sekarang dan masih belum punya jawaban untuk ini. Di mana saya mengatur default_url_options
? Saya sudah mengaturnya untuk config.action_mailer.default_url_options
menyelesaikan bug yang sama di tempat lain, tetapi sekarang saya mendapatkan kesalahan ini ketika mencoba menggunakan bantuan URL di dalam spesifikasi RSpec. Saya tidak tahu di mana mengharapkan default_url_options akan ditetapkan.
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)>'
Kode ini tidak ada hubungannya dengan email / ActionMailer, kebetulan membutuhkan URL alih-alih jalur.
Ada ide?
ruby-on-rails
rspec
d11wtq
sumber
sumber
Jawaban:
Anda perlu menambahkan baris berikut di setiap lingkungan:
config.action_mailer.default_url_options = { :host => "yourhost" }
Dengan begitu, ia dapat bekerja di semua lingkungan dan bisa berbeda dari lingkungan ke lingkungan. Sebagai contoh:
pengembangan.rb
test.rb
produksi
sumber
default_url_options Rails.application.config.action_mailer.default_url_options
meskipun dan itu berhasil, seperti yang disarankan oleh komentator lainDi suatu tempat di
routes.rb
:)sumber
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(tentu saja ganti nama domain yang benar untuk setiap env). Kemudianroutes.rb
saya bebas menggunakandefault_url_options host: Rails.application.config.domain
dan itu akan bekerja di lingkungan apa pun. Sama-sama.default_url_options Rails.application.config.action_mailer.default_url_options
.Tuan rumah harus ditentukan dalam file konfigurasi masing-masing lingkungan. Misalnya:
Lihat pertanyaan ini dan pertanyaan ini .
sumber
Atur
default_url_options
untuk menggunakanaction_mailer.default_url_options
.Dalam setiap file lingkungan Anda (misalnya
development.rb
,production.rb
, dll) Anda dapat menentukandefault_url_options
penggunaan untukaction_mailer
:Namun, ini tidak diatur untuk
MyApp:Application.default_url_options
:Itu sebabnya Anda mendapatkan kesalahan dalam hal di luar
ActionMailer
.Anda dapat mengatur aplikasi Anda yang
default_url_options
menggunakan apa yang Anda tetapkan untukaction_mailer
dalam file lingkungan yang sesuai (development.rb
,production.rb
, dll).Untuk menjaga keadaan tetap KERING mungkin, lakukan ini di
config/environment.rb
file Anda sehingga Anda hanya perlu melakukan ini sekali:Sekarang ketika Anda mem-boot aplikasi Anda, seluruh Aplikasi Anda
default_url_options
akan cocok dengan Andaaction_mailer.default_url_options
:Kiat tip ke @pduersteler karena telah membawaku ke jalan ini.
sumber
config/environment.rb
seperti yang Anda gambarkan adalah kunci untuk membuat mailer saya berfungsi di konsol. Terima kasih!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
untuk Rails 5.2+Ketika Anda menggunakan
listing_url
metode apa pun , URL lengkap akan dikembalikan (bukan yang relatif seperti biasa). Itu sebabnya rails meminta Anda untuk host, untuk menghitung seluruh URL.Bagaimana Anda bisa tahu rel tuan rumah? Anda dapat melakukannya dengan beberapa cara:
1.Menambahkan opsi ini ke setiap lingkungan:
CATATAN: Jika Anda bekerja di dalam mesin kereta api ingatlah untuk melakukan hal yang sama untuk aplikasi tiruan Anda di dalam tes mesin:
path_to_your_engine/test/dummy/config/environments/*
karena ketika Anda menguji mesin itu yang menguji coba terhadap kereta api.2. Tambahkan opsi host ke metode foo_url seperti ini:
3.Tidak menampilkan host dengan opsi
:only_path to true
.IMHO saya tidak melihat titik yang satu ini karena dalam hal ini saya akan menggunakan
listing_path
metode inisumber
Lucunya, pengaturan
config.action_mailer.default_url_options
itu tidak membantu saya. Juga, bermain-main dengan pengaturan yang tidak tergantung lingkungan di tempat-tempat yang saya rasa bukan miliknya tidak memuaskan bagi saya. Selain itu, saya menginginkan solusi yang berfungsi saat membuat url di sidekiq / resque pekerja.Pendekatan saya sejauh ini, yaitu
config/environments/{development, production}.rb
:Ini bekerja untuk saya di rails> = 3.2.x.
sumber
config/environment.rb
file untuk melakukan ini. Dan menambahkan jawaban yang masuk ke detail: stackoverflow.com/a/48529627/293280 Terima kasih telah menunjukkan saya ke arah ini.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
Di developemnt.rb / test.rb, bisa lebih ringkas sebagai berikut:
sumber
Anda selalu dapat mengirimkan host sebagai parameter ke pembantu URL:
sumber
listing_url(listing, host: request.host, port: 3000)
Anda dapat mengatur opsi url default di Pengontrol Aplikasi:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
sumber
Saya memiliki kesalahan yang sama. Saya memiliki semua yang ditulis dengan benar, termasuk Listing 10.13 dari tutorial.
jelas dengan "example.com" diganti dengan url server saya.
Apa yang saya sampaikan dalam tutorial adalah baris ini:
Jadi jawaban bagi saya adalah mematikan dan menghidupkan kembali server.
sumber
pergi ke config / environment / test.rb
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
sumber
untuk berjaga-jaga seandainya seseorang menemukan pencarian ini untuk kesalahan tentang ActiveStorage:
jika Anda memiliki aksi-controller di mana Anda ingin membuat url unggah dll dengan layanan disc lokal (kemungkinan besar di lingkungan pengujian), Anda perlu
include ActiveStorage::SetCurrent
di controller untuk memungkinkanblob.service_url_for_direct_upload
untuk bekerja dengan benar.sumber
Menambahkan default_url di rute bukan solusi yang tepat, tetapi berfungsi untuk beberapa kasus.
Anda harus mengatur default_url di setiap lingkungan (pengembangan, pengujian, produksi).
Anda perlu melakukan perubahan ini.
sumber
Saya memecahkan masalah dengan mengkonfigurasi environment.rb sebagai
YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options
Anda perlu mengatur default_url_options untuk mailer tindakan terhadap setiap lingkungan seperti pengembangan, pengujian, pementasan dan produksi dll.
Referensi: Host yang tidak ada untuk ditautkan! Harap berikan: parameter host atau setel default_url_options [: host]
sumber
Jawaban di atas tidak bekerja untuk saya, setidaknya tidak seperti yang saya inginkan. Saya menyadari
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
setelah menginstal merancang. Semoga ini akan membantu seseorang dengan masalah yang sama.sumber