2010-07-21 3 views
13

У меня есть несколько api, с которыми я интегрирую и нуждаюсь в вызовах в различных частях моего приложения.Как хранить ключи для API в Rails?

Каким образом можно хранить ключи, информацию о пользователе/​​пароле или токене, скажем, файл конфигурации, а затем как я могу их назвать для использования в других частях приложения?

Спасибо.

ответ

4

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

# Eg 
# development/environment.rb 
.... 
API_1_USER = "user101" 
API_1_PW = "secret!" 

Альтернатива заключается в создании файла YAML, а затем прочитать его, когда ваше приложение знаки в к API. Это стиль, используемый рельсам сам с конфигой/databse.yml файл

ДОБАВЛЕНО

Вы также можете хранить как константа, используя хэш или вложенный хэш.

# Eg 
# development/environment.rb 
.... 
API_1 = {"user" => "user101", "pw" => "secret!"} 
API_2 = {"user" => "user102", "pw" => "double_secret"} 

# or nested hashes 
API_KEYS = { 
      "api_1" => {"user" => "user101", "pw" => "secret!"}, 
      "api_2" => {"user" => "user102", "pw" => "double_secret"}} 

# using them in another file: 
foo.signin(API_1['user'], API_1['pw']) 
# or 
foo.signin(API_KEYS["api_1"]['user'], API_KEYS["api_1"]['pw']) 

# note, I use string constants instead of symbols to save vm (since the hash is 
# not referenced more than once or twice). You could also use 
# symbols as the keys, especially if the hash will be referenced often: 
API_1 = {:user => "user101", :pw => "secret!"} 
+0

При использовании этого подхода я голосую за вложенные хеши, а не за подчеркнутые константы. – Matchu

+0

Что такое пример вложенного хэша? И тогда, как я могу вызвать его в контроллере, которому нужен доступ API, так же, как переменная ALL CAP? – Angela

+0

Я добавил пример использования хешей в качестве констант –

7

Вы можете хранить имена пользователей/пароли и аналогичную информацию о конфигурации в механизмах, которые уже используют рельсы; Вы можете либо материал, данные конфигурации прямо в файлы конфигурация среды (где production, testing и development сконфигурированы), или вы можете использовать свой собственный механизм и:

require "yaml" 
config_hash = YAML::load_file("/path/to/your/config.yaml") 
+0

Привет, я думаю, я не понимаю, что такое конфиг. yaml выглядит, не у меня уже есть файл конфигурации среды? – Angela

+0

Предполагается сохранить собственный файл конфигурации в YAML. Это позволяет отделять конфигурацию, зависящую от вашего приложения, от конфигураций Rails. – Chris

+0

хорошо, я вижу .... поэтому я создал свой собственный yaml и поместил код в файл конфигурации? – Angela

0

Заканчивать Configatron, это довольно удивительный и может будет использоваться именно для этой цели.

21

Просто держать этот вопрос уточненный, есть новый способ сделать это в Rails 4.1:

From the Rails guides:

Rails 4.1 создает новый файл secrets.yml в папке конфигурации. По умолчанию этот файл содержит secret_key_base приложения, но он также может использоваться для хранения других секретов, таких как ключи доступа для внешних API.