Ruby on rails 可以在Ruby 2.4上运行Rails 4.2应用程序吗?
我想在Ruby 2.4上试用Rails 4.2应用程序 然而,当我尝试这样做时,我得到了关于json gem版本1.8.3未能安装的错误Ruby on rails 可以在Ruby 2.4上运行Rails 4.2应用程序吗?,ruby-on-rails,ruby,ruby-on-rails-4,ruby-2.4,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby 2.4,我想在Ruby 2.4上试用Rails 4.2应用程序 然而,当我尝试这样做时,我得到了关于json gem版本1.8.3未能安装的错误 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/agrimm/.rbenv/versions/2.4.0-rc1/lib/ruby/gems/2.4.0/gems/json-1.8.3/ext/json/ext/g
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /Users/agrimm/.rbenv/versions/2.4.0-rc1/lib/ruby/gems/2.4.0/gems/json-1.8.3/ext/json/ext/generator
/Users/agrimm/.rbenv/versions/2.4.0-rc1/bin/ruby -r ./siteconf20161223-91367-cql0ne.rb extconf.rb
creating Makefile
current directory: /Users/agrimm/.rbenv/versions/2.4.0-rc1/lib/ruby/gems/2.4.0/gems/json-1.8.3/ext/json/ext/generator
make "DESTDIR=" clean
current directory: /Users/agrimm/.rbenv/versions/2.4.0-rc1/lib/ruby/gems/2.4.0/gems/json-1.8.3/ext/json/ext/generator
make "DESTDIR="
compiling generator.c
generator.c:861:25: error: use of undeclared identifier 'rb_cFixnum'
} else if (klass == rb_cFixnum) {
^
generator.c:863:25: error: use of undeclared identifier 'rb_cBignum'
} else if (klass == rb_cBignum) {
^
2 errors generated.
make: *** [generator.o] Error 1
make failed, exit code 2
Gem files will remain installed in /Users/agrimm/.rbenv/versions/2.4.0-rc1/lib/ruby/gems/2.4.0/gems/json-1.8.3 for inspection.
Results logged to /Users/agrimm/.rbenv/versions/2.4.0-rc1/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-14/2.4.0-static/json-1.8.3/gem_make.out
An error occurred while installing json (1.8.3), and Bundler cannot continue.
Make sure that `gem install json -v '1.8.3'` succeeds before bundling.
我认为这是由于Fixnum和Bignum统一为整数
如果我在Gemfile中添加一个json必须是2.0.0版本的约束,那么它会抱怨Rails4.2需要json~>1.7,这禁止使用2.0.0
除非Rails的维护者决定对Rails的非5.x版本进行更改,或者json gem的维护者决定对他们的gem进行新的非2.x版本的更改,否则我会运气不好吗?目前看来这是不可能的(尽管听起来很奇怪)
看。Json 2.0.0增加了对ruby 2.4的兼容性,但是rails 4.2将Json限制为1.xJsongem对
1.8
分支进行了修复。希望它能很快作为gem发布,但在此期间,您可以在gem文件中直接使用它:
gem 'json', github: 'flori/json', branch: 'v1.8'
gem 'rails', github: 'rails/rails', branch: '4-2-stable'
在最新的4.2.x
gem官方发布一周后,Rails也加入了4-2-stable
分支。希望他们很快也会发布一个新的gem,但这可能对您的gem文件有所帮助:
gem 'json', github: 'flori/json', branch: 'v1.8'
gem 'rails', github: 'rails/rails', branch: '4-2-stable'
最后,您可能还需要从git源加载arel
:
gem 'arel', github: 'rails/arel', branch: '6-0-stable'
通过这三个更改,我可以启动应用程序并查询数据库,但随后遇到了其他与整数统一相关的问题。这一变化似乎会引起一些波澜。现在可以使用rails(2017年2月11日)将rails升级到rails-4.2.8。这是发布此答案后第一个正式支持ruby-2.4的4.2.x版本,ruby 2.4兼容json(
1.8.5
)和arel(6.0.4
)已被释放。我们现在等待的主要事情是一个新的rails4.2.x
release。。。现在rails 4.2.8已经发布,这应该足以让应用程序在ruby 2.4上启动。可能有一些二级和三级依赖项会打印不推荐,但希望它们不是致命的