我尝试将应用程序从3.2升级到rails 4.我认为所有的宝石冲突此刻已经解决,但后来我知道它可能会再次发生。
虽然我尝试“捆绑exec rails s”并在浏览器中打开应用程序转到app home index,但它给了我这个错误:
IOError(未打开阅读)
有人可以帮忙吗?非常感谢你。
这是我使用的宝石列表:
gem 'rails', '4.0.1'
gem 'sass-rails', '~> 4.0.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'jquery-rails'
gem 'jbuilder', '~> 1.2'
# add these gems to help with the transition:
gem 'protected_attributes'
gem 'rails-observers'
gem 'actionpack-page_caching'
gem 'actionpack-action_caching'
gem "activerecord-session_store"
以下是控制台的日志消息:
Started GET "/" for 127.0.0.1 at 2013-11-06 20:16:27 +1100
Processing by HomeController#index as HTML
PCategory Load (0.5ms) SELECT "p_categories".* FROM "p_categories"
Rendered home/index.html.erb within layouts/application (4.1ms)
Completed 500 Internal Server Error in 15ms
IOError (not opened for reading):
activesupport (4.0.1) lib/active_support/json/encoding.rb:256:in `each'
activesupport (4.0.1) lib/active_support/json/encoding.rb:256:in `to_a'
activesupport (4.0.1) lib/active_support/json/encoding.rb:256:in `as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:58:in `block in as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:81:in 'check_for_circular_references'
activesupport (4.0.1) lib/active_support/json/encoding.rb:57:in `as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `block in as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `each'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `map'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:58:in `block in as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:81:in g`check_for_circular_references'
activesupport (4.0.1) lib/active_support/json/encoding.rb:57:in `as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `block in as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `each'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `map'
activesupport (4.0.1) lib/active_support/json/encoding.rb:296:in `as_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:50:in `block in encode'
activesupport (4.0.1) lib/active_support/json/encoding.rb:81:in `check_for_circular_references'
activesupport (4.0.1) lib/active_support/json/encoding.rb:49:in `encode'
activesupport (4.0.1) lib/active_support/json/encoding.rb:306:in `block in encode_json'
activesupport (4.0.1) lib/active_support/json/encoding.rb:306:in `each'
activesupport (4.0.1) lib/active_support/json/encoding.rb:306:in `map'
答案 0 :(得分:4)
原来,创业板冲突是我遇到的类似问题的罪魁祸首。我用来自使用Rails的间接相关问题的代码修复了问题。请看下面,我希望这可以帮到你。
#fix for JSON gem/activesupport bug. More info: http://stackoverflow.com/questions/683989/how-do-you-deal-with-the-conflict-between-activesupportjson-and-the-json-gem
if defined?(ActiveSupport::JSON)
[Object, Array, FalseClass, Float, Hash, Integer, NilClass, String, TrueClass].each do |klass|
klass.class_eval do
def to_json(*args)
super(args)
end
def as_json(*args)
super(args)
end
end
end
end
答案 1 :(得分:1)
我最近自己经历过这个问题。经过几天的反复试验,我最终评论了一组开发组宝石(幸运的猜测),然后逐个重新启用每个宝石,用每个新启用的宝石重建我的宝石套装。罪魁祸首原来是MetaRequest宝石及其依赖,rack-contrib(它做了一些JSONP工作)。
所以这就是我的建议:
- 清空宝石套装(
rvm gemset empty
如果你正在使用rvm)- 将您的Gemfile.lock文件重命名为Gemfile.lock.OLD(这可能没有必要,但以其他方式列出)
- 在您的Gemfile中,注释掉您怀疑处理请求或执行任何JSON工作的任何宝石
- 运行
bundle install
以重建您的宝石集,而不使用已注释掉的宝石- 重新启动服务器。如果仍然收到IOError,请重复步骤1-5。否则,请继续执行步骤6.
- 取消评论您注释掉的其中一颗宝石
- 运行
bundle install
以安装gem及其依赖项- 重新启动服务器。如果您没有遇到IOError,请重复步骤6-8。否则,您最后重新启用的gem就是原因。
醇>
答案 2 :(得分:1)
我使用ActiveModel Serializers gem体验过这一点。我将ActiveModel Serializers从0.8.1升级到0.9,之后它运行良好。