Хорошо, я нашел способ заставить его работать. Не уверен, что мое объяснение ниже объяснит, почему gem dotenv не работает с Rails 6. Но теперь есть лучший способ сделать это в новейшей версии Rails.
Ссылка
Я нашел этот ответ благодаря этой записи в блоге Ромила Мехты ( В Rails 6 добавлена поддержка учетных данных для нескольких сред )
Справочная информация
Похоже, что с Rails 5.2 мы смогли хранить учетные данные вместо секретов. Я не знал этого и продолжал использовать вышеупомянутый драгоценный камень.
Что происходит сейчас
Итак, при создании нового приложения RoR в приложении Rails создается файл config\credentials.yml.enc
, зашифрованный с помощью мастер-ключа. находится в файле config\master.key
. (ПРИМЕЧАНИЕ. Вам следует скрыть этот файл перед первым git commit или любым другим трекером версий, который вы можете использовать.)
Существует много способов отредактировать зашифрованный файл, чтобы добавить свои собственные переменные для разработки. Автор блога использовал эту строку консоли rails в качестве примера: EDITOR=vim rails credentials:edit
. Я предпочитаю 'nano' в качестве редактора, поэтому я изменил строку консоли на: EDITOR=nano rails credentials:edit
.
Новый путь
Из нано-оболочки файл credentials.yml.enc
расшифровывается, и я могу его прочитать. Затем я добавил учетные данные, хранящиеся в моем файле секретов, к которому я пытался получить доступ во всем приложении. Примерно так:
oauth:
server_base_url: http://localhost:3000
oauth_token: 123
oauth_secret: 456
Раньше в моем приложении я ссылался на один из секретных ключей, просто вызывая ENV['variable_name']
, как в ENV['server_base_url']
или ENV['oauth_token']
, и получал бы вывод 'http://localhost:3000' или «123» соответственно. Теперь, чтобы сделать то же самое, мне нужно иметь код: Rails.application.credentials.section_name[:variable_name]
, где 'section_name' - это 'oauth' в моем списке выше, за которым следуют три имени переменных. Итак, для ссылки на 'oauth_token' я бы сделал: Rails.application.credentials.oauth[:oauth_token]
.
Как только я изменил все мои ENV
звонки на код Rails.application.credentials
, мое приложение заработало. Он извлек секретные переменные (теперь «учетные данные») и подключил мой пример приложения к oauth-серверу для авторизации входа в систему.
Резюме
Опять же, я не уверен, как это объясняет, почему гем 'dotenv' не работает в моих новых средах Ruby и Rails. Но, если у кого-то еще есть такая же проблема, вот обходной путь для вас! И поскольку это функция приложения RoR, это, вероятно, не обходной путь, а правильный способ кодирования вашего приложения.
Happy Coding!