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

时间:2016-12-23 09:43:26

标签: 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/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版本的约束,那么它会抱怨Rails 4.2需要json~> 1.7,禁止2.0.0。

除非Rails的维护者决定对非5.x版本的Rails进行更改,否则json gem的维护者决定制作他们的宝石的新的非2.x版本,我是否运气不好?

4 个答案:

答案 0 :(得分:16)

json gem在1.8分支上有一个修复程序。希望它很快就会作为宝石发布,但与此同时你可以直接在你的Gemfile中使用它:

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

Rails在最新的官方4-2-stable gem发布后大约一周内也merged a fix4.2.x分支。希望他们很快也会发布一个新的宝石,但这可能会对你的Gemfile有所帮助:

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

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

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

通过这三项更改,我能够启动我们的应用程序并查询数据库,但随后又遇到了其他与Integer统一相关的问题。似乎这种变化会引起一些波动。

答案 1 :(得分:14)

现在可以使用rails 4.2.8.rc1(2017年2月11日)

答案 2 :(得分:6)

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

答案 3 :(得分:4)

此刻看起来似乎不可能(尽管听起来很奇怪)。

请参阅Changelog for the JSON gem。 Json 2.0.0增加了ruby 2.4的兼容性,但是rails 4.2将json限制为1.x