#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;
...
}
}