Carrierwave & Tire Conflicting - PullRequest
       27

Carrierwave & Tire Conflicting

2 голосов
/ 01 апреля 2012

У меня есть приложение, использующее оба камня: carrierwave & .Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь выполнить rake environment tire:import CLASS=Website FORCE=true --trace, я получаю:

** Invoke environment (first_time)
** Execute environment
** Invoke tire:import (first_time)
** Execute tire:import
[IMPORT] Deleting index 'websites'
[IMPORT] Creating index 'websites' with mapping:
{"website":{"properties":{"id":{"type":"integer"},"title":{"type":"string"}}}}
[IMPORT] Starting import for the 'Website' class
--------------------------------------------------------------------------------
2/2 | 100% rake aborted!##############################################
undefined method `[]' for nil:NilClass
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/carrierwave-0.6.0/lib/carrierwave/orm/activerecord.rb:49:in `block in serializable_hash'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/carrierwave-0.6.0/lib/carrierwave/orm/activerecord.rb:48:in `each'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/carrierwave-0.6.0/lib/carrierwave/orm/activerecord.rb:48:in `serializable_hash'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/model/search.rb:270:in `to_hash'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/model/search.rb:164:in `to_indexed_json'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/model/search.rb:290:in `to_indexed_json'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/index.rb:306:in `convert_document_to_json'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/index.rb:76:in `block in bulk_store'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/relation/delegation.rb:6:in `map'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.2/lib/active_record/relation/delegation.rb:6:in `map'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/index.rb:68:in `bulk_store'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/index.rb:113:in `import'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/tasks.rb:83:in `block (3 levels) in <top (required)>'
/Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/tire-0.4.0/lib/tire/tasks.rb:69:in `block (2 levels) in <top (required)>'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:203:in `call'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:203:in `block in execute'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/bin/rake:19:in `load'
/Users/Kyle/.rvm/gems/ruby-1.9.3-p125/bin/rake:19:in `<main>'
Tasks: TOP => tire:import

Кажется, существует некоторый конфликт между шиной и несущей волной.Если я удалю mount_uploader :screenshot, ScreenshotUploader из модели моего веб-сайта, команда rake будет выполнена успешно.Любые идеи относительно причины этого и какое возможное решение могло бы быть?

1 Ответ

4 голосов
/ 08 апреля 2012

Похоже, что существует конфликт с методом serializable_hash, который используется обеими драгоценными камнями.Tire использует serializable_hash в своем методе to_hash, который перезаписывается Carrierwave.Надеюсь, это немного поможет.

# tire-0.4.0/lib/tire/model/search.rb:270
...
def to_hash
  self.serializable_hash
...

# carrierwave-0.6.0/lib/carrierwave/orm/activerecord.rb:46
...
def serializable_hash(options=nil)
...

РЕДАКТИРОВАТЬ

Вы можете попробовать этот (уродливый) обходной путь.Поместите это в модель вашего сайта:

def to_hash
  self.serializable_hash_copy
end

def serializable_hash_copy(options = nil)
  options = options.try(:clone) || {}

  options[:except] = Array.wrap(options[:except]).map { |n| n.to_s }
  options[:except] |= Array.wrap(self.class.inheritance_column)

  super(options)
end

Я надеюсь, что это работает

...