Проблемы с использованием переменной config/secrets.yml, установленной из переменной ENV на Rails 4.1.0

Давным-давно не играл с Rails, поэтому прошёл учебное пособие по Learn Ruby on Rails, которое отлично.

У меня проблемы с аутентификацией Google, код примера вызывает переменные config/secrets.yml (которые читаются из ENV в оболочке) из метода app_ models / contact.rb model update_spreadsheet ниже

def update_spreadsheet connection = GoogleDrive.login(Rails.application.secrets.gmail_username, Rails.application.secrets.gmail_password)

Я установил переменную ENV через мой ~/.bash_profile и подтвердил, используя следующий код, я могу заставить вещи работать, но это не пример кода, поэтому я просто взломал.

def update_spreadsheet connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])

Я могу заставить его работать, но я хотел следовать учебному пособию и знать, как лучше устранять неполадки. если у кого-то есть указатель, это будет оценено.

Внутри мой файл config/secrets.yml выглядит так:

development: gmail_username: <%= ENV["GMAIL_USERNAME"] %> gmail_password: <%= ENV["GMAIL_PASSWORD"] %>

Спасибо

3 ответа

Rails читает secretts.yml, но получение значения из secrets.yml немного отличается от того, как вы его использовали, проверьте код ниже:

secrets.yml:

разработка: secret_key_base: 3b7cd727ee24e8444053437c36cc66c3 some_api_key: SOMEKEY

Вот как вы можете получить доступ к значению:

Rails.application.secrets.some_api_key возвращает SOMEKEY

У меня была та же проблема здесь, и я следовал всем инструкциям здесь, и все еще испытывал трудности. В моем пароле Gmail нет специальных символов, но в своем профиле.bash я просто попытался поместить одинарные кавычки вокруг содержимого двойных кавычек как для GMAIL_USERNAME, так и для GMAIL_PASSWORD, и это наконец-то сработало!

Вышеупомянутое решение не работает для меня. Тем не менее, я нашел решение о том, как использовать переменные в файле YAML?

Мой файл.yml содержал что-то вроде:

development:
gmail_username: <%= ENV["GMAIL_USERNAME"] %>
gmail_password: <%= ENV["GMAIL_PASSWORD"] %>

В вашем файле.rb откройте файл yml как:

template = ERB.new File.new("path/to/config.yml.erb").read
processed = YAML.load template.result(binding)

Поэтому, когда вы вводите тег скриптлета в файл.yml, это скорее шаблон erb. Поэтому сначала прочтите его как шаблон erb, а затем загрузите yml, как показано выше.

Другие вопросы по тегам