在Rails中使用Ruby生成器时出错(不是Rails :: Generator)

时间:2010-01-27 17:01:16

标签: ruby-on-rails ruby generator

编辑:要清楚,我正在尝试使用此kind of generator(即使用'yield'语句)而不是Rails生成器。

我在Rails项目中有以下(简化的)初始化程序mixin,我可以使用一些帮助。我想要做的是创建一个生成器来跟踪Twitter API调用(这只是用于调试,我知道有关rate_limit_status)。

require 'generator'
# Be sure to restart your server when you modify this file.
module TwitterMixin
  def get_auth
    @auth ||= Twitter::HTTPAuth.new(ENV['TWITTER_USER'], ENV['TWITTER_PASS'])
  end
  def count
    @counter ||= generator.new
    @counter.yield
  end
  def client
    p "#{count} Twitter API calls this iteration"
    @client ||= Twitter::Base.new(get_auth)
  end
end

问题是我收到以下错误:

dlopen(/Users/john/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.bundle, 9): no suitable image found.  Did find:
/Users/john/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.bundle: mach-o, but wrong architecture - /Users/john/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.bundle

这似乎与json生成器发生冲突,这可能是一个更封闭的范围。 主要问题是如何确保调用Ruby标准库类(特别是生成器类)?

我还是Ruby,BTW的新手,并且在Rails :: Generator中搜索“Rails中的生成器”非常占主导地位,所以这可能相当明显。此外,我对这个问题有更优雅的解决方案,我可能已经错过了。感谢。

3 个答案:

答案 0 :(得分:1)

你的系统上有一个名为“generator”的ruby gem吗?听起来像红宝石根据您的要求定位宝石有困难。如果你正在使用Rubigen生成器,那么你需要:

require 'rubigen'

等等。试试跑:

gem list generator

如果它没有提起任何东西,你可能用错误的名字调用了库。

答案 1 :(得分:0)

您不必构建生成器,您可以直接使用yield方法,这是我没有意识到的。这段代码有效。

# Be sure to restart your server when you modify this file.
module TwitterMixin
  def get_auth
    @auth ||= Twitter::HTTPAuth.new(ENV['TWITTER_USER'], ENV['TWITTER_PASS'])
  end
  def count
    @num ||= 0
    while true
      num += 1
      yield num
    end
  end
  def client
    p "#{count} Twitter API calls this iteration"
    @client ||= Twitter::Base.new(get_auth)
  end
end

答案 2 :(得分:0)

让我拒绝我之前的回答,并说使用“yield”认为它是一个内置类似于Python的yield语句的生成器,这对我来说是相当愚蠢的。我今天在第一次关于Ruby块的RubyGorge会议上了解到了这一点。因此,我认为我仍然在寻求解决这个问题的方法。