能否在Ruby 2.4上运行Rails 4.2应用程序?

19

我想在 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统一为Integer所致。

如果我在Gemfile中添加了一个json版本必须为2.0.0的限制,则会提示Rails 4.2需要json ~> 1.7,不支持2.0.0。

除非Rails的维护者决定更改为非5.x版本,或者json gem的维护者决定制作新的非2.x版本,否则我是否就没戏了呢?

4个回答

16

json 宝石在 1.8 分支上进行了修复。希望不久会作为宝石发布,但在此期间,您可以直接在 Gemfile 中使用它:

gem 'json', github: 'flori/json', branch: 'v1.8'

Rails在最新的4.2.x版本的官方gem发布约一周后,也合并了一个修复程序到4-2-stable分支中。希望他们也能尽快发布新的gem,但这可能对你的Gemfile有所帮助:merged a fix

gem 'rails', github: 'rails/rails', branch: '4-2-stable'

最后,您可能还需要从Git源加载 arel

gem 'arel', github: 'rails/arel', branch: '6-0-stable'

通过这三个更改,我能够启动我们的应用程序并查询数据库,但随后遇到了其他与整数统一相关的问题。看起来这个更改会引起一些波澜。


自发布此答案以来,已经发布了与ruby 2.4兼容的json(1.8.5)和arel(6.0.4)版本。现在我们正在等待一个新的rails 4.2.x版本发布。 - James Healy
1
现在Rails 4.2.8已经发布,足以让应用程序在Ruby 2.4上启动。可能会出现一些二级和三级依赖项的弃用警告,但希望它们不是致命的。 - James Healy

15

现在可以通过Rails 4.2.8.rc1(于2017年2月11日发布)实现。


7

将Rails升级到Rails-4.2.8版本。这是第一个正式支持Ruby-2.4的4.2.x版本。


4

目前看来似乎不可能实现(尽管听起来很奇怪)。

请参阅JSON gem的更改日志。Json 2.0.0增加了对Ruby 2.4的兼容性,但Rails 4.2限制了json的版本为1.x。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接