Я гуглял уже около 90 минут и до сих пор не могу ответить на этот вопрос. Где я могу установить default_url_options
? Я уже установил его для config.action_mailer.default_url_options
решения этой же ошибки в другом месте, но теперь я получаю эту ошибку, когда пытаюсь использовать URL-помощник в спецификации RSpec. Я понятия не имею, где он ожидает установки default_url_options.
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)>'
Этот код не имеет ничего общего с электронной почтой / ActionMailer, просто ему нужен URL вместо пути.
Любые идеи?
ruby-on-rails
rspec
d11wtq
источник
источник
Ответы:
Вам необходимо добавить следующую строку в каждую среду:
config.action_mailer.default_url_options = { :host => "yourhost" }
Таким образом, он может работать во всех средах и может отличаться от среды к среде. Например:
development.rb
test.rb
production.rb
источник
default_url_options Rails.application.config.action_mailer.default_url_options
Хотя добавлено, и этоГде-то в
routes.rb
:)источник
listing_url(listing, :host => "whatever.com")
.config.domain = 'staging.myapp.com'
(конечно, подставьте правильное имя домена для каждого env). Тогдаroutes.rb
я могу свободно использоватьdefault_url_options host: Rails.application.config.domain
его, и он будет работать в любой среде. Пожалуйста.default_url_options Rails.application.config.action_mailer.default_url_options
.Хост должен быть указан в файле конфигурации каждой среды. Например:
Смотрите этот вопрос и этот вопрос .
источник
Установите
default_url_options
для использования вашегоaction_mailer.default_url_options
.В каждом из файлов вашей среды (например
development.rb
,production.rb
и т. Д.) Вы можете указать, чтоdefault_url_options
использовать дляaction_mailer
:Однако они не предназначены для
MyApp:Application.default_url_options
:Вот почему вы получаете эту ошибку за пределами
ActionMailer
.Вы можете настроить свои Приложения
default_url_options
на использование того, что вы определилиaction_mailer
в соответствующем файле среды (development.rb
,production.rb
и т. Д.).Чтобы сделать вещи максимально сухими, сделайте это в своем
config/environment.rb
файле, так что вам нужно сделать это только один раз:Теперь, когда вы загружаете свое приложение, все ваше приложение
default_url_options
будет соответствовать вашемуaction_mailer.default_url_options
:Шляпа на @pduersteler, чтобы привести меня по этому пути.
источник
config/environment.rb
как вы описали, была ключом к тому, чтобы заставить мою почтовую программу работать в консоли. Спасибо!Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options
для Rails 5.2+При использовании любого
listing_url
метода будет возвращен полный URL-адрес (не относительный, как обычно). Вот почему rails запрашивает у вас хост, чтобы вычислить весь URL.Как вы можете сказать, рельсы хозяина? Вы можете сделать это несколькими способами:
1. Добавление этой опции в каждую среду:
ПРИМЕЧАНИЕ: если вы работаете внутри двигателя рельсов, не забудьте сделать то же самое для своего фиктивного приложения в тестах двигателя:
path_to_your_engine/test/dummy/config/environments/*
потому что, когда вы тестируете двигатель, это то, против чего тестирует рельсы.2. Добавьте опцию host к методу foo_url следующим образом:
3.Не выводить хост с опцией
:only_path to true
.ИМХО, я не вижу смысла в этом, потому что в этом случае я бы использовал
listing_path
методисточник
Самое смешное, что настройка
config.action_mailer.default_url_options
мне не помогает. Кроме того, возиться с независимыми от окружающей среды настройками в местах, где я чувствовал, что они не принадлежат, меня не устраивало. Кроме того, я хотел решение, которое работало бы при генерации URL-адресов у работников sidekiq / resque.Мой подход до сих пор, который входит в
config/environments/{development, production}.rb
:Это работает для меня в рельсах> = 3.2.x.
источник
config/environment.rb
файле. И добавил ответ, который подробно описан : stackoverflow.com/a/48529627/293280 Спасибо, что указали мне в этом направлении.Rails.application.routes.default_url_options[:host]= 'localhost:3000'
В developmnt.rb / test.rb, может быть более кратким, как показано ниже:
источник
Вы всегда можете передать host в качестве параметра помощнику URL:
источник
listing_url(listing, host: request.host, port: 3000)
Вы можете установить параметры URL по умолчанию в Application Controller:
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
источник
У меня была такая же ошибка. У меня все написано правильно, включая Листинг 10.13 из учебника.
очевидно, с "example.com" заменил на мой URL сервера.
То, что я затушевал в уроке, было этой строкой:
Поэтому ответом для меня было выключить и снова включить сервер.
источник
перейдите в config / environment / test.rb
Rails.application.routes.default_url_options [: host] = 'localhost: 3000'
источник
на тот случай, если кто-то найдет этот поиск ошибок ActiveStorage:
если у вас есть действие контроллера, в котором вы хотите сгенерировать загрузочные URL-адреса и т. д. с локальным дисковым сервисом (скорее всего, в тестовой среде), вам нужно включить
include ActiveStorage::SetCurrent
контроллер, чтобы позволитьblob.service_url_for_direct_upload
работать правильно.источник
Добавление default_url в маршруты не является правильным решением, хотя в некоторых случаях это работает.
Вы должны установить default_url в каждой среде (разработка, тестирование, производство).
Вам нужно внести эти изменения.
источник
Я решил проблему, настроив environment.rb как
YourApp :: Application.default_url_options = YourApp :: Application.config.action_mailer.default_url_options
Вам необходимо установить default_url_options для почтовой программы действий для каждой среды, такой как разработка, тестирование, подготовка и производство и т. Д.
Ссылка: Отсутствует хост для ссылки на! Пожалуйста, предоставьте: параметр хоста или установите default_url_options [: хост]
источник
Приведенный выше ответ не работает для меня, по крайней мере, не так, как я хотел. Я понял
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
после установки устройства. Надеюсь, это поможет кому-то с такой же проблемой.источник