2011-10-06 18 views
6

ilgili, Raylar app benim Ruby yinelendiği hata burada, aylar eskidir: kod değişiklikleri göstermektedir ki içindeEski Yakut hata Class.create ve delayed_job

http://www.ruby-forum.com/topic/1094002

İki bağlantı:

https://github.com/godfat/ruby/commit/f4e0e8f781b05c767ad2472a43a4ed0727a75708 https://github.com/godfat/ruby/commit/c7a6cf975d88828c2ed27d253f41c480f9b66ad6

Ben Ruby 1.9.2 ve rvm var. Bu değişiklikleri uygun dosyalara yapıştırırdım, ama nasıl olduğunu bilmiyorum.

Bu birkaç gün önce çalıştı. Yapamayacağım gibi Ruby on komutları: ben öldüm

after_create do |user| 
    user.delay(:priority => -15).seed 
end 

:

ArgumentError: wrong number of arguments(1 for 0) 
from /Users/RedApple/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:48:in `method' 
from /Users/RedApple/.rvm/rubies/ruby-1.9.2 p290/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:48:in `accept' 
from /Users/RedApple/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:36:in `<<' 
from /Users/RedApple/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:165:in `dump' 
from /Users/RedApple/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych/core_ext.rb:13:in `psych_to_yaml' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.0.4/lib/delayed/backend/base.rb:57:in `payload_object=' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2918:in `block in assign_attributes' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2914:in `each' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2914:in `assign_attributes' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2787:in `attributes=' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2477:in `initialize' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:725:in `new' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:725:in `create' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/delayed_job-2.0.4/lib/delayed/message_sending.rb:9:in `method_missing' 
from /Users/RedApple/S/app/models/user.rb:29:in `block in <class:User>' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-2.3.14/lib/active_support/callbacks.rb:182:in `call' 
... 7 levels... 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/callbacks.rb:267:in `create_with_callbacks' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2927:in `create_or_update' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/callbacks.rb:250:in `create_or_update_with_callbacks' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:2577:in `save' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/validations.rb:1089:in `save_with_validation' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/dirty.rb:79:in `save_with_dirty' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/transactions.rb:229:in `block in with_transaction_returning_status' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in `transaction' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/transactions.rb:182:in `transaction' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/transactions.rb:228:in `with_transaction_returning_status' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/transactions.rb:196:in `block in save_with_transactions' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/transactions.rb:208:in `rollback_active_record_state!' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/transactions.rb:196:in `save_with_transactions' 
from /Users/RedApple/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.14/lib/active_record/base.rb:727:in `create' 
from (irb):1 
from /Users/RedApple/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'> 
user.rb içinde

Hat 28-30: Burada

>> User.create :username => "a", :password => "a" 

hata mesajı Suda bu olmadan. Biri yardım edebilir mi?

+0

Güncelleme: Ruby 1.8.7'yi kullanmaya başladım ve bu artık bir problem değil, yani bir Ruby 1.9.2 hatası. Geliştirme ve üretimde aynı ortamı kullanmak en iyisi olduğu için hala bir çözüm istiyorum. – Eric

+0

Güncelleme: 1.8.7'de çalışmasına rağmen 1.8.7 ile başka problemler yaşıyorum, bu yüzden gerçekten 1.9.2'de çalışmak gerekiyor. – Eric

cevap

6

Gecikmeli İş ve Yakut 1.9.2 YAML ayrıştırıcısı (Psych) maalesef uyumlu değil. Bundler.require hemen çağrısı altında, sizin config/application.rb bu ekleyerek önceki YAML ayrıştırıcı (Syck) için

Anahtar:

YAML::ENGINE.yamler = "syck" if RUBY_VERSION >= "1.9.2" 
+0

Çok teşekkürler. Ben gerçekten config/environment.rb dosyasında yapıştırdım. Şimdi çalışıyor. – Eric

+0

Bu benim için iyi bir düzeltme gibi görünmüyor. Tüm dokümanlar, Psych’in şu anda tercih edilen YAML arka ucunu oluşturduğuna işaret ediyor. – simianarmy

+0

@simianarmy, Hepsi çok güzel, ama Gecikmeli İş düzeltilinceye kadar başka bir yol yok. – molf

1

Sen Ruby yama, ama o gerçekten mümkün kolay değil değil yönetilen ana bilgisayarlar. Çözümümün 31075.

sizin Raylar bir başlatıcı dosyası oluşturma işlemek yama dayalı bir monkeypatch yaratmaktı proje config/ilklendiriciler/psych_extensions.rb ve bu kodu ekleyin:

# APPLIES RUBY PATCH REVISION 31075 

module Psych 
    module Visitors 
    ### 
    # YAMLTree builds a YAML ast given a ruby object. For example: 
    # 
    # builder = Psych::Visitors::YAMLTree.new 
    # builder << { :foo => 'bar' } 
    # builder.tree # => #<Psych::Nodes::Stream .. } 
    # 
    class YAMLTree < Psych::Visitors::Visitor 

     def accept target 
     # return any aliases we find 
     if node = @st[target.object_id] 
      node.anchor = target.object_id.to_s 
      return @emitter.alias target.object_id.to_s 
     end 

     if target.respond_to?(:to_yaml) 
      loc = target.public_method(:to_yaml).source_location.first 
      if loc !~ /(syck\/rubytypes.rb|psych\/core_ext.rb)/ 
      unless target.respond_to?(:encode_with) 
       if $VERBOSE 
       warn "implementing to_yaml is deprecated, please implement \"encode_with\"" 
       end 

       target.to_yaml(:nodump => true) 
      end 
      end 
     end 

     if target.respond_to?(:encode_with) 
      dump_coder target 
     else 
      send(@dispatch_cache[target.class], target) 
     end 
     end 

     private 

     # FIXME: remove this method once "to_yaml_properties" is removed 
     def find_ivars target 
     loc = target.public_method(:to_yaml_properties).source_location.first 
     unless loc.start_with?(Psych::DEPRECATED) || loc.end_with?('rubytypes.rb') 
      if $VERBOSE 
      warn "#{loc}: to_yaml_properties is deprecated, please implement \"encode_with(coder)\"" 
      end 
      return target.to_yaml_properties 
     end 

     target.instance_variables 
     end 

    end 
    end 
end