(我对Rails比较陌生)
我有一个文件(Ruby),我正在通过Ironworkers运行/上传,该文件当前正在使用MySql(activeRecord)作为数据库。 ALl 工作正常,但我们现在需要一个新的(附加的)模型,它将使用 Mongoid,它也将包含在我们上传到 IronWorker 的代码中。 当我在我的 IronWorker 文件中包含以下行merge_gem"mongoid"时,我得到:
弃用警告:不再需要为属性方法指定空前缀/后缀。如果在调用该方法时尚未定义该方法的无前缀/后缀版本
define_attribute_methods
则会自动定义该方法。(从/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/attribute_methods/read.rb:9 中的块调用)
弃用警告:同步已弃用,将从 Rails 3.2 中删除。(从/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:298 调用) 弃用警告:define_attr_method已弃用,将被删除而不进行替换。(从 set_table_name/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:660 调用) 弃用警告:define_attr_method已弃用,将被删除而不进行替换。(从/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/locking/optimistic.rb:150 从set_locking_column调用)/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/attribute_methods/read.rb:82:indefine_read_method': uninitialized constant ActiveModel::AttributeMethods::COMPILABLE_REGEXP (NameError)
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/attribute_methods/read.rb:42:in
define_method_attribute' 来自/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/attribute_methods/time_zone_conversion.rb:35:indefine_method_attribute'
from /task/gems/activemodel/lib/active_model/attribute_methods.rb:267:in
块在define_attribute_method' 来自/task/gems/activemodel/lib/active_model/attribute_methods.rb:260:ineach'
from /task/gems/activemodel/lib/active_model/attribute_methods.rb:260:in
define_attribute_method' from/task/gems/activemodel/lib/active_model/attribute_methods.rb:256:inblock in define_attribute_methods'
from /task/gems/activemodel/lib/active_model/attribute_methods.rb:256:in
来自/task/gems/activemodel/lib/active_model/attribute_methods.rb:256:INdefine_attribute_methods'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/attribute_methods.rb:14:in
define_attribute_methods' 来自/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/attribute_methods.rb:65:INrespond_to?'
from /task/gems/activesupport/lib/active_support/callbacks.rb:398:in
__run_callback' from/task/gems/activesupport/lib/active_support/callbacks.rb:385:in_run_find_callbacks'
from /task/gems/activesupport/lib/active_support/callbacks.rb:81:in
run_callbacks' from/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:1617:ininit_with'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:959:in
instanceiate' 来自/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:470:INblock in find_by_sql'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:470:in
收集! 来自/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:470:infind_by_sql'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/relation.rb:112:in
to_a' 来自/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/relation/finder_methods.rb:376:infind_first'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/relation/finder_methods.rb:122:in
first' 来自/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/relation/finder_methods.rb:263:infind_by_attributes'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.6/lib/active_record/base.rb:1070:in
method_missing' from/task/user_setup.rb:74:innew_user_setup'
from /task/user_setup.rb:39:in
initialize' from/task/justa_worker.rb:48:innew'
from /task/justa_worker.rb:48:in
run' from/task/runner.rb:405:in ''
首先,iron_worker gem 不久前被弃用了。如果可以,请将代码更新为iron_worker_ng gem ( https://github.com/iron-io/iron_worker_ruby_ng )。此操作将解决合并 gem 的 99.9% 问题(这是编写新 gem 的主要原因)
可能的原因:gem 版本不匹配,主要是 rails gem。 活动记录/活动支持/等
尝试:
- 再次检查实际使用的 gem 版本
- 手动设置精确版本(merge_gem中的第二个参数)
- 在 ruby 代码中的某个地方使用神奇的结构
gem 'mygem', '=0.1.2'