Подтвердить что ты не робот

Отсутствие производства secret_key_base в рельсах

Недавно я развернул приложение и получил внутреннюю ошибку сервера из-за отсутствия производства secret_key_base. После нескольких часов тестирования мне удалось решить эту проблему двумя способами:

Метод 1:

Я сгенерировал новую secret_key с rake secret и заменил ее на <%= ENV["SECRET_KEY_BASE"] %> в secrets.yml. Развернутое приложение снова и на этот раз оно сработало. Но я считаю, что этот метод неверен.

Метод 2:

Я сгенерировал новый secret_key с rake secret и добавил его к environments/production.rb как config.secret_key_base = 'd1f4810e662acf46a33960e3aa5bd0************************, не меняя secrets.yml (по умолчанию - production: <%= ENV["SECRET_KEY_BASE"] %>). Развернутое приложение снова, и он работает нормально.

Мои вопросы:

  • Какой метод лучше?
  • Если второй метод верен, почему рельсы по умолчанию не генерируют secret_key_base в production.rb?
  • Есть ли другой способ сделать это?
4b9b3361

Ответ 1

Наконец-то я нашел метод corrent. Ни один из методов, о которых идет речь, является правильным.

Правильный метод:

Мы сами должны сгенерировать секретный ключ (через rake secret), затем создать переменные среды для SECRET_KEY_BASE, выполнив следующую команду из командной строки:

rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a myapp

после запуска этой команды, подключитесь к вашему серверу через SSH и запустите env, чтобы вы могли видеть свою SECRET_KEY_BASE в списке.

Теперь перезагрузите приложение rhc app-stop myapp и rhc app-start myapp, тогда вам будет удобно идти.

Ответ 2

Если вы находитесь на обычной машине Ubuntu, просто поставьте export SECRET_KEY_BASE=" <<< output from rake secret here >>> " в свой ~/.bashrc.

Запустите source ~/.bashrc и перезапустите приложение.

Ответ 3

Существует еще один вариант, который должен быть немного более безопасным, и это нужно добавить в конфигурационный файл Apache/Nginx. Я использую Apache и только что использовал:

SetEnv SECRET_KEY_BASE my_secret

Затем просто оставьте файл secrets.yml установленным: производство: <% = ENV [ "SECRET_KEY_BASE" ]% >

Для веб-сервера производства я не уверен, что он допустим, что файл .bashrc запущен и получит ваш набор переменных ENV, но я думаю, что этот способ определенно его установить. Я не так и эксперт, поэтому готов иметь какие-либо риски или причины, почему это не очень хорошая мысль.

Ответ 4

Метод 1 правильный. Вы не хотите хранить свои секреты в коде.