2016-08-04 2 views
0

Я делаю простой RubyGem (без Rails), который использует почтовый камень для отправки электронных писем из CLI. Чтобы настроить почтовую программу, я должен предоставить пароль, который я хочу хранить в секретном режиме в переменной ENV или что-то, чтобы он не был общедоступным.Настройка переменных окружения в рубиновом камне

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

В gemspec spec.files Я обязательно включил файл .env.

Я не думаю, что понимаю процесс загрузки переменных в RubyGem.

ответ

0

Тот факт, что правильное поведение зависит от текущего рабочего каталога во время вызова, указывает на то, что это относительная проблема пути. Поскольку это работает хотя бы некоторое время, ваша установка gemspec должна быть правильной.

Я сам не использовал Dotenv, но, глядя через источник, вы можете указать путь к вашему файлу env через Dotenv.load - это путь вперед.

Попробуйте использовать Dotenv.load(File.expand_path("../.env", __FILE__)) от bin/myapp или адаптируйте его к своей структуре каталогов (при условии, что файл env находится в корневом каталоге).

Аналогичный подход обсуждается в this tutorial.

0

Dotenv - это инструмент, используемый для переноса переменных окружения в разные среды исполнения (например, разработка, постановка, производство и т. Д.), И он не предназначен для использования в драгоценных камнях. Причина, по которой это работает, когда вы запускаете скрипт в каталоге проекта, - это то, как Dotenv предназначен для работы.

Попробуйте вместо этого использовать глобальную переменную ENV (которая просто загружает переменные среды с вашего компьютера) и инструктирует ваших пользователей самостоятельно устанавливать среду, а не иметь файл .env в камне. То, что должно разрешить запуск сценария из любого места, при условии, что нет других проблем.