我完全迷失在这一个。我正在使用ruby 2.2.4并将应用程序从rails 4.1.0升级到4.2。该应用程序运行正常。我改变了我的Gemfile使用:
gem 'rails', '~>4.2'
然后运行我的规范测试,应用程序爆炸了这个错误:
usr/local/rvm/rubies/ruby-2.2.4/bin/ruby -I/path-to-my-app/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.5.0/lib:/path-to-my-app/vendor/bundle/ruby/2.2.0/gems/rspec-support-3.5.0/lib /path-to-my-app/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.5.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb
Coverage report generated for RSpec to /path-to-my-app/coverage. 22 / 1206 LOC (1.82%) covered.
/path-to-my-app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.7.1/lib/active_record/attribute_methods/time_zone_conversion.rb:64:in `create_time_zone_conversion_attribute?': undefined method `type' for "NUMBER(38)":String (NoMethodError)
from /path-to-my-app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.7.1/lib/active_record/attribute_methods/time_zone_conversion.rb:53:in `block (2 levels) in inherited'
当我尝试在浏览器中加载应用时出现错误:
undefined method 'type' for "NUMBER(38)":String
我谷歌了,发现了一篇帖子。它出现在StackOverflow中:NoMethodError: Undefined method 'type' for nil:NilClass in Rails,它引导我:https://gist.github.com/alsemyonov/88826/revisions
我尝试了在github应用程序中发布的修复程序,但我仍然得到同样的错误。
在错误中提及'time_zone_conversion.rb'和我读到的东西让我觉得这是:与datetime相关。我在几个模型中有一个方法可以在日期字段“updated_at”上工作。不确定这是否相关。
def updated_at_formatted
self.updated_at.strftime("%m/%d/%Y")
end
我也在使用gem'american_date'。
对于导致此问题以及如何解决问题的任何想法都将非常感激。
谢谢,
答案 0 :(得分:0)
找到它: Oracle增强适配器版本1.6仅支持Rails 4.2,不支持Rails 4.1或更低版本的Rails。 使用Ruby on Rails版本4.2时,在Gemfile中包括
gem 'activerecord-oracle_enhanced-adapter', '~> 1.6.0'
一位同事和我在错误中逐步完成了堆栈跟踪。他觉得这句话:
undefined method 'type' for "NUMBER(38)":String
以某种方式与数据库问题挂钩,对于这个应用程序是Oracle。谷歌搜索Rails 4.2升级和上面的oracle gem的问题引导我们得到上述答案。