2014-10-30 2 views
0

Я использую Fedora 20 и устанавливаю Ruby версии 2.0 и Rails версии 4.1.6.Ruby on Rails on Fedora 20

Я попытался 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.

+2

выглядит как заголовки рубин отсутствуют. Попробуйте сначала установить их с помощью YUM: 'sudo yum install ruby-devel'. После этого вы можете столкнуться с несколькими другими пакетами разработки, например,' libxml2-devel' и для баз данных 'sqlite3-devel' (и' mysql-devel' если вы собираетесь использовать MySQL) –

+0

Вот сопоставимый вопрос для RHEL http://stackoverflow.com/questions/18918588/did-i-install-ruby-1-9-3-correctly-on-rhel, хотя вы выиграли ' t хочу 'ruby193-devel' пакеты, а просто« ruby-devel »на Fedora, который отправляет Ruby 2.0 –

ответ

0

Используйте вместо этого RVM.

Если вы все еще новичок, это дает вам возможность экспериментировать с различными версиями и средами.

+0

Все проблемы, связанные с отсутствующими заголовками разработки (пакеты RPM-пакета), будут встречаться с RVM. Более того, поскольку Ruby нужно будет скомпилировать. Не сказать, что RVM не является хорошим решением, когда Ruby сортируется изначально и хорошо понимается на платформе ... –

+0

@MichaelBerkowski, что вы подразумеваете под словом «Не сказать, что RVM не является хорошим решением, когда Ruby сортируется изначально и хорошо понимается на платформе ... »? – blelump

+0

@blelump Я имею в виду, что RVM _is_ - хорошее решение, как только вы поймете, как получить Ruby, Rails и Rubygems, правильно работающие на вашей платформе без него. Но, представляя RVM, даже если я могу развернуть простой «рельс новый», я задаю проблемы, на мой взгляд. –

0

Проблема заключается в том, что поставщик не использует системные рубигемы, если более новые версии доступны из rubygems.org. Таким образом, даже если у вас есть rubygem-json, установленный из пакетов Fedora, если, например, это версия 1.8.1, он будет проигнорирован, так как версия 1.8.2 находится в rubygems.

Такая же проблема возникает с несколькими другими драгоценными камнями, но не приводит к сбою пучка, если только самоцвет не использует собственные расширения (то есть код C, который необходимо скомпилировать). Таким образом, json gem не удалось установить, но другие драгоценные камни будут успешно установлены (из rubygems, а не из yum).

Эта проблема была discussed in depth on Github, и, к сожалению, it has no easy solution, а не тот, который включает в себя Bundler. Bundler призван гарантировать, что, учитывая Gemfile/Gemfile.lock, он устанавливает точно такие версии драгоценных камней, независимо от того, в какой системе он выполняется.

Если вы должны использовать только системные драгоценные камни, то вам нужно создать приложение с rails new app --no-gemfile, установить все необходимых системные камни самостоятельно, и документ, драгоценные камни, они так, что установка камня может быть повторены позже для тестирования и развертывания. В частности, ваше приложение будет не иметь Gemfile или Gemfile.lock. Как правило, это нужно делать только в том случае, если вы разрабатываете развертывание для определенного дистрибутива ОС (например, RHEL 7) и разрешено использовать только пакеты, предоставленные системой. Это достаточно распространено в разработке корпоративного программного обеспечения. Если вы не в этом сценарии, вы должны, вероятно, не использовать рубины или рубигмы вообще, и предпочитаете RVM.

1

I tried gem install json -v '1.8.1' or sudo yum install json ... but it didn't change, I couldn't run Rails.

пакет Система будет на самом деле решить эту проблему, но вам нужно будет заблокировать его версию в вашем Gemfile.

Возможно, вы не знаете, но в целом Рубин на Rails рамках фактически упакованы, так работает:

# yum install rubygem-rails 

установит Rails для вас. Но так как вы будете, скорее всего, установка некоторых других драгоценных камней или их новые версии, установить заголовочные файлы Ruby, а также путем установки ruby-devel пакет:

# yum install ruby-devel 

Использование системы Ruby-пакет на самом деле хороший выбор, который прост в установке и дает вам обновления безопасности, среди прочего. Использование Ruby версии Manager поможет вам, только если вам нужна другая версия Ruby, которая не предоставляется вашей ОС.

0

Просто запустите bundle update в корне проекта