Rails production выдает ошибку 422 (изменение, которое вы хотели, было отклонено)

#ruby-on-rails #digital-ocean

#ruby-on-rails #digital-ocean

Вопрос:

Я запускаю Rails production в digital ocean droplet. Я могу загружать статические страницы, но всякий раз, когда происходит действие контроллера (например, create , signin , signup ), сервер выдает сообщение «Изменение, которое вы хотели, было отклонено». ошибка. Кто-нибудь знает, почему это происходит?

Я могу добавлять данные через консоль, но не могу через приложение.

Комментарии:

1. проверьте производство. журнал приложения и журнал ошибок вашего веб-сервера (nginx, apache)

Ответ №1:

У вас есть 2 варианта решения этой проблемы. 1. Установите токен CSRF в свой файл cookie 2. добавьте skip_before_action :verify_authenticity_token в свой контроллер

Комментарии:

1. В какой контроллер я должен добавить skip_before_action :verify_authenticity_token . application_controller??

2. В контроллере, который возвращает вам эту ошибку. Вы рассказали о таких действиях, как create . В этом контроллере вам нужно добавить.

3. Или вы можете добавить это в свой базовый контроллер (если он у вас есть, конечно)

4. Я настоятельно рекомендую вам ЭТОГО НЕ делать skip_before_action :verify_authenticity_token , потому что это не подвергнет ваше приложение атакам CSRF?

Ответ №2:

Иногда это может быть связано с проблемой внешней конфигурации, например, в моем случае в rails все было в порядке, но в nginx мне не хватало X-Forwarded-Ssl конфигурации и я получал

 HTTP Origin header (https://www.example.com) didn't match 
request.base_url (http://www.example.com)
  

которое было решено путем его настройки

 server {
 ....
 location @app {
 ...
   proxy_set_header  X-Forwarded-Ssl on;
 ...
 }
}