Обновлен Rails до 6, появляется ошибка заблокированного хоста

Мне нужна была новая функция в ActiveStorage для resize_to_fill, поэтому я обновился до Ruby 2.5.1 и Rails 6.

ruby '2.5.1'

gem "rails", github: "rails/rails"

Когда я остановился, а затем запустил свой сервер (Cloud 9), я получил ошибку Rails:

Заблокированный хост: xxxxxxx-xxxxxxx.c9users.io Чтобы разрешить запросы к xxxxxxx-xxxxxxx.c9users.io, добавьте следующую конфигурацию:

Rails.application.config.hosts ‹< "xxxxxxx-xxxxxxx.c9users.io"

Я пробовал перезапуск, новые окна, но от этого ничего не избавляется. Я никогда раньше не видел этой ошибки. Я предполагаю, что новая версия Rails что-то делает?


person Tony S.    schedule 21.12.2018    source источник
comment
Я создал новое приложение, чтобы проверить, было ли это моим исходным приложением или каждым приложением. На нем уже был запущен Ruby 2.5.1. Я изменил Gemfile, чтобы использовать Edge Rails (6), gem 'rails', github: 'rails/rails', как и раньше. Я запустил сервер, и он сделал то же самое, выдал ту же ошибку.   -  person Tony S.    schedule 21.12.2018
comment
Я добавил Rails.application.config.hosts << "xxxxxxx-xxxxxxx.c9users.io" в config/application.rb, и это исправило мое тестовое приложение. Затем я проделал это с моим настоящим приложением, и оно тоже сработало. Проблема в том, что Devise также выдал ошибку, которая, по-видимому, не будет исправлена, по крайней мере, до бета-версии Rails 6. Думаю, я возвращаюсь в Carrierwave для решения своих задач по изменению размеров изображений, пока ActiveStorage не станет более зрелым.   -  person Tony S.    schedule 21.12.2018


Ответы (7)


Заблокированный хост - это новая функция Rails 6. Вы можете добавить этот шаблон в свой config/environments/development.rb, чтобы не беспокоиться об этом в случае динамических URL-адресов.

config.hosts << /[a-z0-9]+\.c9users\.io/

Также для пользователя ngrok просто замените выше c9users на ngrok

Источник: https://github.com/MikeRogers0/puma-ngrok-tunnel

person Dat Le Tien    schedule 17.07.2019
comment
Лучший ответ imo, поскольку он показывает использование регулярного выражения. Примечательно: мне пришлось перезапустить мой сервер rails, чтобы изменения вступили в силу. Ymmv. - person panepeter; 10.11.2020
comment
Честно говоря, это лучшее решение для пользователей NGROK, потому что оно позволяет вам избавиться от тех глупых жемчужин, которые заставляют вас делать это в любом случае. +10000 - person oriont; 24.11.2020

Если вы хотите отключить эту функцию в своей среде разработки, вы можете добавить config.hosts.clear в config/environments/development.rb.

person kobaltz    schedule 21.05.2019
comment
У меня это не сработало, но config.hosts.clear сработало. - person manuelmhtr; 22.07.2020
comment
Вы правы; Я отредактировал ответ, чтобы изменить его. - person bjnord; 03.04.2021

Эта статья сработала для меня:

  1. Первый вариант - занести в белый список имена хостов в config/environments/development.rb:

    Rails.application.configure do
      config.hosts << "hostname" # Whitelist one hostname
      config.hosts << /application\.local\Z/ # Whitelist a test domain
    end
    
  2. Второй вариант - очистить весь белый список, который пропускает запросы для всех имен хостов:

    Rails.application.configure do
      config.hosts.clear
    end
    

Благодарность принадлежит Манфреду Стиенстре.

person Kiry Meas    schedule 06.09.2019

Простое решение:

Добавьте эту строку в config/environments/development.rb

config.hosts << /[a-z0-9]+\.ngrok\.io/

Перезагрузите сервер rails, и он будет работать

person stevec    schedule 06.12.2020
comment
У меня это не работает. - person s89_; 13.05.2021
comment
Однако использование ".ngrok.io" вместо регулярного выражения действительно работает. - person s89_; 13.05.2021
comment
@ s89_ это интересно, спасибо, что дали мне знать. Не могли бы вы сообщить мне, на какой у вас ОС и какая версия rails? - person stevec; 13.05.2021
comment
MacOS Big Sur / Rails 6.1.3 - person s89_; 13.05.2021
comment
@ s89_ хм. У меня тоже была macOS (думаю, catalina). Рельсы 6.0.1. Возможно, дело в рельсах. - person stevec; 13.05.2021

Я добавил Rails.application.config.hosts << "xxxxxxx-xxxxxxx.c9users.io" в config/application.rb, и это исправило мое тестовое приложение. Затем я проделал это с моим настоящим приложением, и оно тоже сработало. Проблема в том, что Devise также выдал ошибку, которая, по-видимому, не будет исправлена, по крайней мере, до бета-версии Rails 6. Думаю, я вернусь к Carrierwave, чтобы изменить размер изображения, пока ActiveStorage не станет более зрелым.

person Tony S.    schedule 14.04.2020

В ГОЛОВУ: Вы можете внести свой хост в белый список с конфигурацией application.config.hosts << 'your_unvalid_host_name', но по-прежнему иметь ошибку. В этом случае сообщение об ошибке в настоящее время неверно. См. Эту проблему. Вы не должны использовать имя хоста с подчеркиванием. NB: application.config.hosts.clear работает в этом случае.

person pimpin    schedule 11.06.2021

В Rails 6 Action Pack введен ActionDispatch :: HostAuthorization и по умолчанию разрешены только [IPAddr.new («0.0.0.0/0»), IPAddr.new («:: / 0»), «localhost»]

Вы можете добавить массивы RegExp, Proc, IPAddr и String или одну строку в файл config / application.rb следующим образом

class Application < Rails::Application
  config.hosts << "xxxxxxx-xxxxxxx.c9users.io"
  ...
end

Из "https://drivy.engineering/rails-6-unnoticed-features" :

В Rails 6 добавлено новое промежуточное ПО под названием ActionDispatch :: HostAuthorization, позволяющее заносить в белый список некоторые хосты для вашего приложения и предотвращать Атаки на заголовок хоста. Вы можете легко настроить его с помощью String, IPAddr, Proc и RegExp (полезно при работе с доменами с подстановочными знаками).

person Donapieppo    schedule 16.05.2019
comment
Немного поздно увидеть это, но спасибо за информацию. Я должен это проверить. - person Tony S.; 15.04.2020
comment
Rails.application.config.hosts ‹< .product.com разрешает использование всех поддоменов для product.com - по крайней мере, в Rails 6 - person EastSw; 17.10.2020