Ruby on rails 可以在Ruby 2.4上运行Rails 4.2应用程序吗?

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

我想在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/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
)已被释放。我们现在等待的主要事情是一个新的rails
4.2.x
release。。。现在rails 4.2.8已经发布,这应该足以让应用程序在ruby 2.4上启动。可能有一些二级和三级依赖项会打印不推荐,但希望它们不是致命的