2

我的 gemfile 中有以下行并做了一个bundle install

gem 'twilio-ruby'

我有以下基于 twilio-ruby gem 示例的代码:

class TwilioEntriesController < ApplicationController

  def process_message

    # init client 
    @account_sid = 'REMOVED'
    @auth_token = 'REMOVED'
    @from_number = '+14159675278'

    @client = Twilio::REST::Client.new(@account_sid, @auth_token)

    # send response
    @client.account.sms.messages.create(
      :from => @from_number,
      :to => '+REMOVED',
      :body => 'Hey there!'
    )

    render :result, :layout => ''
  end  

end

我得到的错误是:

uninitialized constant TwilioEntriesController::Twilio

Ruby 似乎正在“TwilioEntriesController”中寻找“Twilio”类,这是调用的来源。它应该从正确的类(“Twilio”)中调用该方法-给出了什么?

如何按照 twilio-ruby 文档的描述在 Twilio 类上调用静态方法?

4

5 回答 5

2

这绝对是由于没有正确需要 Twilio gem 造成的。仔细检查bundle list包含 twilio-ruby,并且在您的 rails 应用程序中正确设置了捆绑程序。

于 2011-12-10T22:05:10.180 回答
1

当查找常量时,Ruby 会 walk Module.nesting,这就是[TwilioEntriesController]你的情况。对于每个条目,它将搜索:

  1. 在模块本身
  2. 在该条目中包含的模块中(递归)
  3. 对于类,在超类中(也递归)

如果在任何地方都找不到该模块,则会引发异常,并且在异常消息中使用它用于搜索的第一个模块。因此,您的错误也意味着顶层没有 Twilio 常量,可能是因为缺少对require.

(Ruby 中没有静态方法之类的东西;只有实例方法和类方法——后者也可以被视为实例方法,这取决于您的观点。)

于 2011-12-10T22:28:08.340 回答
0

Try ::Twilio on line 10.

That's like calling an absolute path from root (/foo/bar) for Modules & Classes.

于 2011-12-10T22:15:37.607 回答
0

我有一段时间没有构建 Rails 应用程序,但我认为你可以通过放置

require 'twilio-ruby'

在控制器文件的顶部。可能有一个更合适的中心位置可以将您的所有需求放入现代 Rails 应用程序中,因此请查阅文档以了解正确的方法。

于 2011-12-11T05:57:11.007 回答
0

为时已晚,但最近遇到了同样的错误。将此添加到您的文件中:

require 'rubygems'
require 'twilio-ruby'
于 2020-10-29T19:44:46.970 回答