Rails Production - Как установить секретную базу ключей?

Итак, я пытаюсь запустить приложение rails в рабочем режиме, но получаю сообщение об ошибке: Отсутствует secret_token и secret_key_base для среды 'production', задайте эти значения в config/secrets.yml

Мой файл secrets.yml выглядит так, как ожидалось:

development:
  secret_key_base: xxxxxxx

test:
  secret_key_base: xxxxxxx

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Но даже после google и исследований я понятия не имею, что делать с производственной секретной ключевой базой. Большая часть информации там предполагает, что у меня есть определенное знание фона, но реальность такова, что я noob.

Может ли кто-нибудь объяснить мне, как установить свой секретный ключ и заставить его работать в рабочем режиме?

Ответы

Ответ 1

Вы можете сгенерировать ключ, используя следующие команды

$ irb
>> require 'securerandom'
=> true
>> SecureRandom.hex(64)
=> "3fe397575565365108556c3e5549f139e8078a8ec8fd2675a83de96289b30550a266ac04488d7086322efbe573738e7b3ae005b2e3d9afd718aa337fa5e329cf"
>> exit

Ответ 2

Ошибки, которые вы получаете, просто указывают на то, что переменная окружения для secret_key_base неправильно установлена ​​на сервере.

Вы можете использовать различные сценарии, такие как capistrano, которые автоматизируют процесс установки этих параметров до запуска приложения.

Что касается быстрого исправления, попробуйте это:

export SECRET_KEY_BASE=YOUR SECRET BASE

Подтвердите переменные среды и проверьте, были ли они установлены.

Команда:

env | grep -E "SECRET_TOKEN|SECRET_KEY_BASE"

Если ваши значения появляются, то они устанавливаются на производственном сервере.

Также лучше использовать ENV.fetch(SECRET_KEY), поскольку это приведет к возникновению исключения до того, как приложение даже попытается запустить.

Ответ 3

Этот ответ мне очень помог. Он указывает вам, как настроить файл secrets.yml в процессе производства и как его прочитать из среды:

оригинальная ссылка: fooobar.com/questions/44430/...

У меня была та же проблема, и я решил ее, создав среду переменная, подлежащая загрузке, каждый раз, когда я вошел в систему для производства и выполнил мини-руководство по его настройкам:

https://gist.github.com/pablosalgadom/4d75f30517edc6230a67

Я использовал Rails 4.1 с Unicorn v4.8.2, когда я попытался развернуть мой приложение не запускалось должным образом, и в файле unicorn.log я нашел это сообщение об ошибке:

"ошибка приложения: Отсутствует secret_key_base для" производственной "среды, устанавливается это значение в config/secrets.yml(RuntimeError)"

После некоторых исследований я узнал, что Rails 4.1 изменил способ управляйте secret_key, поэтому, если вы читаете файл secrets.yml, расположенный по адресу [exampleRailsProject]/config/secrets.yml вы найдете что-то вроде это:

Не сохраняйте секреты производства в репозитории,

вместо этого читать значения из среды. production: secret_key_base: <% = ENV [ "SECRET_KEY_BASE" ]% > Это означает, что рельсы

рекомендует использовать переменную среды для secret_key_base на вашем рабочем сервере, чтобы решить эту ошибку, вы должны выполните следующие действия, чтобы создать переменную среды для Linux (в моей case Ubuntu) на вашем рабочем сервере:

1.- В терминале вашего производственного сервера выполните следующую команду:

$RAILS_ENV = секция производства rake Это возвращает большую строку с буквы и цифры, скопируйте это (мы будем ссылаться на этот код как GENERATED_CODE).

2.1. Войдите в систему как пользователь root на свой сервер, найдите этот файл и отредактируйте его: $vi/etc/profile

Перейти к нижней части файла ( "SHIFT + G" для капитала G в VI)

Напишите переменную среды с GENERATED_CODE (нажмите клавишу "i" для записи в VI), обязательно в новой строке в конце файла:

export SECRET_KEY_BASE = GENERATED_CODE Сохраните изменения и закройте файл (мы нажимаем клавишу "ESC", а затем записываем клавиши ": x" и "ENTER" для сохранения и выход в VI)

2.2 Но если вы входите в систему как обычный пользователь, позвоните ему example_user для этого метода, вам нужно будет найти один из этих других файлов:

$vi ~/.bash_profile $vi ~/.bash_login $vi ~/.profile Эти файлы в порядке важности, это означает, что если у вас есть первый файл, то вам не нужно будет писать в других. Итак, если вы нашли это 2 файла в вашем каталоге "~/.bash_profile" и "~/.profile" вам только нужно будет записать в первом "~/.bash_profile", потому что Linux будет читать только этот, а другой будет проигнорирован.

Затем мы перейдем к нижней части файла ( "SHIFT + G" для капитала G в VI)

И мы напишем нашу переменную среды с нашим GENERATED_CODE (Нажмите клавишу "i", чтобы писать в VI), обязательно в новой строке в конце файла:

export SECRET_KEY_BASE = GENERATED_CODE Написав код, сохраните изменения и закрыть файл (мы нажимаем клавишу "ESC", а затем записываем ": x" и "ENTER" для сохранения и выхода в VI)

3.- Вы можете проверить, что наша переменная среды правильно установлена ​​в Linux с помощью этой команды:

$printenv | grep SECRET_KEY_BASE или с помощью:

$echo $SECRET_KEY_BASE Когда вы выполняете эту команду, если все прошло нормально, он покажет вам GENERATED_CODE. Наконец, с вся конфигурация, которую вы должны выполнить, проблемы с вашим Rails-приложением с Unicorn или другим.

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

И вот оно! Я надеюсь, что этот мини-справочник поможет вам решить эту ошибку.

Отказ от ответственности: я не гуру Linux или Rails, поэтому, если вы что-то найдете неправильная или любая ошибка, я буду рад ее исправить!

Ответ 4

Как вы можете видеть, есть жестко закодированное значение для сред development и test, но одно для production происходит от переменной. Прежде всего, почему так? Это функция безопасности. Таким образом, если вы проверите этот файл в контроле версий, например git или svn, значения development и test получат общий доступ, что хорошо, но production один (тот, который будет использоваться на настоящий веб-сайт) нет, поэтому никто не может смотреть на источник, чтобы получить этот секрет.

Что касается используемой переменной, ENV["SECRET_KEY_BASE"], это переменная среды из среды Rails запускается (не путать с средой Rails), например development, test и production). Эти переменные среды поступают из оболочки. Как упоминалось в сообщении JensD, вы можете временно установить эту переменную среды:

export SECRET_TOKEN=YOUR SECRET TOKEN
export SECRET_KEY_TOKEN=YOUR SECRET BASE

Чтобы создать новый секретный токен, используйте команду rake secret в командной строке.

Это временное, но не хорошее окончательное решение. Для окончательного решения, проверьте эту статью, которая быстро заканчивается при реализации dotenv, чтобы загрузить секреты конфигурации. Помните, что если вы используете контроль версий, обязательно исключите ваш файл .env из списка!

Настройка dotenv up занимает немного работы, но я настоятельно рекомендую ее, пытаясь вручную настроить эти переменные среды.

Ответ 5

в настоящее время (rails 6) rails генерирует базу секретных ключей в tmp/development_secret.txt для вас.

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

Вы можете проверить с Rails.application.secret_key_base.

должен дать вам длинную строку цифр и символов от 'a' до 'f' (строка в шестнадцатеричном коде длиной 128 символов)