2012-04-01 5 views
2

Ich habe eine Anwendung, die beide & tire Edelsteine ​​verwendet. Das Problem, das ich in laufen lasse, wenn ich versuche, rake environment tire:import CLASS=Website FORCE=true --trace zu tun, die ich erhalten:Carrierwave & Tyre Conflicting

** 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 

Es scheint eine gewisse Art von Konflikt zwischen Reifen und Trägerwelle zu sein. Wenn ich mount_uploader :screenshot, ScreenshotUploader von meinem Website-Modell entferne, wird der Rake-Befehl erfolgreich ausgeführt. Irgendwelche Ideen bezüglich der Ursache und was eine mögliche Lösung sein könnte?

+0

Bitte aktualisieren Sie auf CarrierWave 0.6.1 wurde dieses Problem gibt es den anderen Tag festgelegt. – bensie

+0

Haben Sie einen Link zum Problem # und/oder Pull Request # auf Github? –

+0

https://github.com/jnicklas/carrierwave/pull/681 – bensie

Antwort

4

Es sieht aus als ob es einen Konflikt mit der serializable_hash Methode gibt, die von beiden Edelsteinen benutzt wird. Tire verwendet die serializable_hash-Methode in ihrer to_hash-Methode, die von Carrierwave überschrieben wird. Ich hoffe, das hilft ein bisschen.

# 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) 
... 

EDIT

Sie könnten diese (hässlich) Abhilfe versuchen. Setzen Sie diese in Ihre Website-Modell:

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 

Ich hoffe, es funktioniert

+0

Das wurde in Cartridwave v0.6.1 behoben, aber danke, dass du mich in die richtige Richtung gelenkt hast! –