2014-12-15 3 views
2

Я работаю над интеграцией Twilio API в мое приложение Rails. Я выполнил учебник here, но у меня возникла проблема с получением ключей API в контроллере. Они рекомендуют использовать переменные ENV, однако мне нелегко обернуть голову, как это сделать (только с использованием Rails в течение нескольких недель).Rails: Передача ключей API к контроллеру

Так что я думаю, у меня есть два вопроса:

  • Что такое лучший/простой способ использовать ENV переменные в развитии/локальной среде?
  • Если я жестко задал значения в файле secrets.yml, разве это не должно работать? Я понимаю, что это не идеально для безопасности, но для тестирования, будет ли это работать или им нужно будет каким-то образом инициализироваться?

Ошибка:

ArgumentError in NotificationsController#notify - Account SID and auth token are required 

notifications_controller.rb

require 'twilio-ruby' 

class NotificationsController < ApplicationController 

    skip_before_action :verify_authenticity_token 

    def notify 
    client = Twilio::REST::Client.new Rails.application.secrets.twilio_account_sid, Rails.application.secrets.twilio_auth_token 
    message = client.messages.create from: '+18588779747', to: '+18583821931', body: 'First ever MyMedy notifcation test.' 
    render plain: message.status 
    end 

end 

secrets.yml

development: 
  secret_key_base: 'XXXXXXXXXXXXXXXXXXX' 
  twilio_account_sid: <%= ENV["TWILIO_ACCOUNT_SID"] %> 
  twilio_auth_token: <%= ENV["TWILIO_AUTH_TOKEN"] %> 

test: 

production: 
  secret_key_base: 'XXXXXXXXXXXXXXXXXXX' 
  twilio_account_sid: <%= ENV["TWILIO_ACCOUNT_SID"] %> 
  twilio_auth_token: <%= ENV["TWILIO_AUTH_TOKEN"] %> 

ответ

2

Я евангелист-разработчик для Twilio.

Существует несколько способов установить ENV переменных в приложении Rails. Простейшее это запустить следующую пару строк в окне терминала, в котором вы запускаете вашу команду rails server

export TWILIO_ACCOUNT_SID=ACXXXXX 
export TWILIO_AUTH_TOKEN=YYYYYY 

Тогда для жизни этого окна будут установлены эти переменные среды.

Для более постоянного решения вы можете добавить эти пару строк к своему ~/.bash_profile.

export TWILIO_ACCOUNT_SID=ACXXXXX 
export TWILIO_AUTH_TOKEN=YYYYYY 

, а затем source ~/.bash_profile, который будет загружать переменный в текущее окно терминала, а затем любое другое терминальное окно при открытии.

Есть также некоторые драгоценные камни, которые могут помочь.Проверьте envyable, Figaro или dotenv, которые могут быть использованы для установки переменных ENV в приложении в приложении по умолчанию.

2

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

На боковой ноте при использовании рельсов лучше всего придерживаться конвенции о действиях RESTful. Вместо того, чтобы использовать это:

require 'twilio-ruby' 

class NotificationsController < ApplicationController 

    skip_before_action :verify_authenticity_token 

    def notify 
    client = Twilio::REST::Client.new Rails.application.secrets.twilio_account_sid, Rails.application.secrets.twilio_auth_token 
    message = client.messages.create from: '+18588779747', to: '+18583821931', body: 'First ever MyMedy notifcation test.' 
    render plain: message.status 
    end 

end 

Вы можете использовать это:

require 'twilio-ruby' 

class NotificationsController < ApplicationController 

    skip_before_action :verify_authenticity_token 

    def create 
    client = Twilio::REST::Client.new Rails.application.secrets.twilio_account_sid, Rails.application.secrets.twilio_auth_token 
    message = client.messages.create from: '+18588779747', to: '+18583821931', body: 'First ever MyMedy notifcation test.' 
    render plain: message.status 
    end 

end 

Вы можете также посмотреть, чтобы переместить некоторые из этих методов в более чистый метод модели, или даже service object.

Смежные вопросы