2014-10-30 7 views
0

Fedora 20을 사용 중이며 Ruby 버전 2.0과 Rails 버전 4.1.6을 설치했습니다. Fedora 20의 Ruby on Rails

나는 rails new example을 시도했지만이 오류를 가지고 : 나는 gem install json -v '1.8.1' 또는 sudo yum install json 시도

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` 

을 ...하지만, 내가 레일을 실행할 수 없습니다 변경하지 않았다.

+2

루비 헤더가 누락 된 것처럼 보입니다. 'sudo yum install ruby-devel' 다음에는'libxml2-devel'과'sqlite3-devel' (그리고'mysql-devel') 같은 몇 가지 다른 devel 패키지가 필요할 수 있습니다. MySQL을 사용하려는 경우 –

+0

RHEL http://stackoverflow.com/questions/18918588/did-i-install-ruby-1-9-3-correctly-on-rhel에 대해 비슷한 질문이 있지만, 'ruby193-devel' 패키지를 원하지만 Ruby 2.0을 포함하고있는 Fedora에서'ruby-devel'을 사용하기를 원합니다. –

답변

0

대신 RVM을 사용하십시오.

새로운 사용자라면 다른 버전과 환경을 실험 할 수있는 옵션이 제공됩니다.

+0

RVM에서는 개발 헤더 누락과 관련된 모든 문제 ('-devel' RPM 패키지)가 발생합니다. Ruby 자체를 컴파일해야하기 때문에 더욱 그렇다. Ruby가 처음에 분류되어 플랫폼에서 잘 이해 될 때 RVM이 좋은 해결책이 아니라고 말할 수는 없습니다 ... –

+0

@MichaelBerkowski, Ruby를 사용할 때 RVM이 좋은 해결책이 아니라고 말하는 것은 무엇을 의미합니까? 처음에 정렬되고 플랫폼에서 잘 이해된다 ... '? – blelump

+0

@blelump RVM은 Ruby, Rails, Rubygems를 사용하지 않고 플랫폼에서 제대로 작동하는 방법을 이해하면 좋은 해결책입니다. 그러나 RVM을 도입하기 전에 간단한 '레일스 새'를 돌릴 수 있기 때문에 문제가 생길 수도 있습니다. –

0

여기서 문제는 rubygems.org에서 최신 버전을 사용할 수있는 경우 bundler가 시스템 rubygems를 사용하지 않는다는 것입니다. 따라서 Fedora 패키지에서 rubygem-json을 설치 했더라도 1.8.1 버전 인 경우에는 버전 1.8.2가 rubygems에 있기 때문에 무시됩니다.

같은 문제가 다른 몇몇 보석에서 발생하지만 보석이 기본 확장 (즉, 컴파일해야하는 C 코드)을 사용하지 않으면 번들이 실패하지 않습니다. 따라서 json gem은 설치에 실패했지만 다른 보석은 성공적으로 설치됩니다 (yum이 아닌 rubygems에서).

이 문제는 discussed in depth on Github이며, 불행하게도 it has no easy solution이며 Bundler가 관련된 문제는 아닙니다. Bundler는 Gemfile/Gemfile.lock을 통해 주어진 시스템의 버전에 관계없이 주어진 보석의 버전을 정확하게 설치하도록 보장합니다.

당신은, 당신은 보석 설치가 나중에 반복 할 수 있도록되어 보석 필요한 모든 시스템 보석 자신의, 문서를 rails new app --no-gemfile하여 응용 프로그램을 만들 설치 만 시스템 보석 사용이 필요합니다 경우 테스트 및 배포 용. 특히, 귀하의 응용 프로그램은 이 아니며에는 Gemfile 또는 Gemfile.lock이 있습니다. 일반적으로 특정 OS 배포 (예 : 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 년 버전을 잠글 필요가있다.

그렇게 실행, 아마 당신은 모르지만, 레일 프레임 워크에 전체 루비 실제로 패키징 :

# yum install rubygem-rails 

당신을 위해 레일을 설치합니다. 당신이 가장 가능성이 다른 보석 또는 최신 버전을 설치되기 때문에 단, ruby-devel 패키지를 설치하여뿐만 아니라 루비 헤더 파일을 설치 : 실제로 설치가 용이 좋은 선택을 시스템 루비 패키지되어 사용

# yum install ruby-devel 

및 보안 업데이트를 제공합니다. Ruby 버전 관리자를 사용하는 것은 OS에서 제공하지 않는 다른 버전의 Ruby가 필요한 경우에만 도움이 될 것입니다.

0

프로젝트 루트에서 bundle update을 실행하십시오.