如果我安装 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。
安装这些工具:
- 安装
ruby-install
:https://github.com/postmodern/ruby-install - 安装
chruby
:https://github.com/postmodern/chruby - 安装
gem_home
:https://github.com/postmodern/gem_home
并按照每个 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/