Ошибка при использовании генератора Ruby в Rails (не Rails :: Generator) - PullRequest
1 голос
/ 27 января 2010

Редактировать: Для ясности я пытаюсь использовать этот вид генератора (т.е. с оператором yield), а не генератор Rails.

У меня есть следующий (упрощенный) mixin инициализатора в проекте Rails, с которым я мог бы помочь. Я хотел создать генератор для отслеживания вызовов API Twitter (это просто для отладки, я знаю о 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» довольно часто доминирует Rails :: Generator, так что это может быть довольно очевидно. Кроме того, я открыт для более изящных решений этой проблемы, которые я, возможно, пропустил. Спасибо.

Ответы [ 3 ]

1 голос
/ 27 января 2010

Есть ли в вашей системе рубиновый камень под названием "генератор"? Похоже, у Рубина возникли проблемы с поиском драгоценного камня в зависимости от ваших потребностей. Если вы используете генератор Rubigen, то вам нужно:

require 'rubigen'

и т. Д. попробуйте запустить:

gem list generator

Если ничего не происходит, вы, вероятно, называете библиотеку неправильным именем.

0 голосов
/ 29 января 2010

Позвольте мне отвергнуть мой предыдущий ответ и сказать, что с моей стороны было довольно глупо использовать «yield», полагая, что это генератор, встроенный в аналог оператора Python yield. Я узнал сегодня на нашей первой RubyGorge встрече о блоках Ruby. Таким образом, я думаю, что я все еще ищу решение этой проблемы.

0 голосов
/ 28 января 2010

Вам не нужно строить генератор, вы можете напрямую использовать метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...