我正在努力将Twilio API集成到我的Rails应用程序中。我按照教程here进行了操作,但是我遇到了将API密钥插入控制器的问题。他们建议使用ENV变量,但是,我很难绕过如何做到这一点(仅使用Rails几周)。
所以我猜我有两个问题:
错误:
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"] %>
答案 0 :(得分:2)
如果您只是希望控制器操作正常工作,请随意粘贴值以消除一个依赖项。在确定它正在工作之后,将其移动到secrets.yml或application.yml文件中。
另外,在使用rails时,最好坚持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。
答案 1 :(得分:2)
我是Twilio的开发人员传道者。
在Rails应用程序中设置ENV
变量的方法有很多种。最简单的方法是在运行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
变量。