我正在使用Fedora 20并安装了Ruby 2.0和Rails版本4.1.6。
我尝试了rails new example
,但收到了这个错误:
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using rake 10.3.2
Using i18n 0.6.11
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h
Gem files will remain installed in /home/sntr/.gem/ruby/gems/json-1.8.1 for inspection.
Results logged to /home/sntr/.gem/ruby/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
An error occurred while installing json (1.8.1), and Bundler cannot continue.
Make sure that `gem install json -v '1.8.1'` succeeds before bundling.
run bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
我尝试了gem install json -v '1.8.1'
或sudo yum install json
...但它没有改变,我无法运行Rails。
答案 0 :(得分:1)
我尝试过gem install json -v' 1.8.1'或sudo yum安装json ...但它没有改变,我无法运行Rails。
系统包实际上会解决问题,但您需要将其版本锁定在 Gemfile 中。
也许你不知道,但整个Ruby on Rails框架实际上是打包的,所以运行:
# yum install rubygem-rails
将为您安装Rails。但由于您最有可能安装其他一些宝石或其新版本,因此安装Ruby头文件也需要安装ruby-devel
包:
# yum install ruby-devel
使用系统Ruby包实际上是一个很好的选择,易于安装,并提供安全更新等。只有当您需要操作系统未提供的其他版本的Ruby时,使用Ruby版本管理器才能帮助您。
答案 1 :(得分:0)
改为使用RVM。
如果您还是新手,它会为您提供试验不同版本和环境的选项。
答案 2 :(得分:0)
这里的问题是如果rubygems.org提供了更新的版本,那么bundler不会使用系统rubygems。因此,即使您从Fedora软件包安装了rubygem-json,例如它的版本为1.8.1,也会被忽略,因为版本1.8.2在rubygems中。
其他几个宝石也会出现同样的问题,但除非gem使用原生扩展(即需要编译的C代码),否则不会导致捆绑失败。因此json gem无法安装,但其他宝石将成功安装(来自rubygems,而不是yum)。
这个问题是discussed in depth on Github,不幸的是it has no easy solution,而不是涉及Bundler的问题。 Bundler旨在确保在给定Gemfile / Gemfile.lock的情况下,无论运行什么系统,它都会安装所给出的gems版本。
如果您必须仅使用系统宝石,那么您需要使用rails new app --no-gemfile
创建应用,自行安装所有必要的系统宝石,然后记录文档它们是宝石,以便以后可以重复进行宝石安装以进行测试和部署。特别是,您的应用不将具有Gemfile或Gemfile.lock。通常,如果您正在开发特定操作系统分发(例如RHEL 7)上的部署,并且只允许使用系统提供的软件包,则只需执行此操作。这在企业软件开发中很常见。如果您不在这种情况下,您可能不根本不使用系统ruby或rubygems,并且更喜欢RVM。
答案 3 :(得分:0)
只需在项目的根目录中运行bundle update