c - 如何将我的 JSON 扩展链接到正确的 Ruby 版本?

标签 c ruby

如果我安装 Ruby 2.1.6(或 2.2.2 等)并尝试 require 'json',我会遇到段错误。我 reported this并被告知“您的 json 扩展链接到 ruby​​ 2.0.0,而不是 ruby​​ 2.1.6。”

我用 ruby-install 安装我的 Ruby 版本,我不太了解编译 Ruby 的细节。

如何让这个扩展链接到正确版本的 Ruby?

澄清

这是一个关于编译 Ruby 可执行文件的 C 源代码的问题。它需要C知识来回答,而不仅仅是Ruby知识;这就是我用两种语言标记它的原因。

我的真正目标是能够使用最新的 Ruby 版本(当前为 2.2.2)rails server。执行 require 'json' 有时会触发段错误,但 rails s 总是会。

更新

我正在找人指导我弄清楚并解决这个问题。

我尝试将整个 ~/.rubies 文件夹移动到 ~/.old_rubies 并执行 ruby-install ruby​​ 2.2.2从头开始。我已经尝试卸载它允许我卸载的每个 JSON gem(尽管它不会让我删除默认 gem)。有时 irb; require 'json' 有效,但启动 Rails 服务器总是出现段错误。

最佳答案

听起来您正在处理一个典型的依赖 hell 问题。

首先要做的是:我们需要隔离您的环境。我们不希望您的操作系统安装的 Ruby 或其 gem 干扰您的项目安装的 Ruby。

安装这些工具:

并按照每个 Homebrew 的说明进行操作。

现在安装您喜欢的 Ruby:

ruby-install ruby 2.2.2

导航到您的项目目录:

cd ~/projects/operation-snugglepants

切换到您喜欢的 Ruby:

chruby 2.2.2

然后确保您没有被系统 Ruby 抢占:

which ruby

应该给你一条类似的路径

~/.rubies/ruby-2.2.2/bin/ruby

并验证它是正确的版本:

ruby -v
ruby 2.2.2p95 ...

太好了——现在您拥有了合适的 Ruby。让我们确保您拥有正确的 gem 。将您的 gem 安装目标设置为您的项目目录:

gem_home .

并安装 bundler :

gem install bundler

然后安装你的gems:

bundle install

完成后,现在捆绑 rails server 并验证它是否正常工作:

bundle exec rails server
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000

始终确保将系统 依赖项(系统Ruby 和系统gems)与应用程序 依赖项(应用程序Ruby 和应用程序gems)隔离开来。尽可能不要将两者混合。

我也用 short Bash script在我的 shell 启动时加载一些别名以“跳转”到我的 Ruby 项目特定环境中,使事情更容易使用——随意滑动它!

关于c - 如何将我的 JSON 扩展链接到正确的 Ruby 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407780/

相关文章:

c - 如何在 Trinket 上生成/处理监听器?

ruby - 有限制的 Ruby 线程

C编程链表和删除

c - 使用C中的信号,如何在定时器结束时停止和继续程序

ruby-on-rails - Ruby 如何使用 erb 解释生成器模板而不引发错误?

ruby - 比较 Ruby 中的范围

ruby - 如何从 Rails 中的代码解析和发送整个复杂的 XML

php - 哪种语言具有更好的线程功能? PHP 或 ruby

在主函数中更改全局数组的大小

c - 隐藏结构上的单个项目