2008-08-26 5 views
9

루비를 사용하여 트위터 메시지를받을 때 알림을받을 수 있도록 루비 보석을 설치하려고합니다. 그러나 gem update --system을 수행 한 후에는 gem install을 시도 할 때마다 zlib 오류가 발생합니다. 아래는 루비 보석을 설치하려고 할 때 나오는 콘솔 출력입니다. (gem environment의 출력과 함께).루비 보석을 설치할 수 없습니다 - zlib 오류

C:\data\ruby>gem install twitter 
ERROR: While executing gem ... (Zlib::BufError) 
    buffer error 

C:\data\ruby>gem update --system 
Updating RubyGems 
ERROR: While executing gem ... (Zlib::BufError) 
    buffer error 

C:\data\ruby>gem environment 
RubyGems Environment: 
    - RUBYGEMS VERSION: 1.2.0 
    - RUBY VERSION: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] 
    - INSTALLATION DIRECTORY: c:/ruby/lib/ruby/gems/1.8 
    - RUBY EXECUTABLE: c:/ruby/bin/ruby.exe 
    - EXECUTABLE DIRECTORY: c:/ruby/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86-mswin32-60 
    - GEM PATHS: 
    - c:/ruby/lib/ruby/gems/1.8 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://gems.rubyforge.org/ 

답변

3

나는 오늘 밤에도 이것을 시작했다. 결과

gem update --system 

및 package.rb의 기능 만이 교체하도록되어 원본을 대체 할 예정이다 jamis에서 코드의 일부 붙여 넣기를 제공하지 않은 제안을 잔뜩 켜져 인터넷 검색을 할 곳이 없다 녹이다.

루비 젬을 다시 설치해도 도움이되지 않았습니다. 지금 루비를 다시 설치하고 있습니다 ......... 고정되어 있습니다. 그래도 고통스러워.

1

Ruby를 다시 설치하면이 문제가 분류됩니다. 그것은 내가 원하는 것이 아닙니다. 나는 왜 내가 문제를 얻었는지 알고 싶었지만, 모두 정리했다.

+0

필자의 경우 레일 2.1.0과 2.1.2 사이를 앞뒤로 전환했다는 것이 문제라고 생각합니다. 의존성 설치로 인한 문제가 발생했다고 생각합니다. – srboisvert

+0

앱에 레일 고정 당신은 그것에 대한 별도의 보석이 필요없고 갈등을 일으키지 않을 것입니다. – nitecoder

1

다운로드가 실패한 경우, 즉 네트워크 시간 초과, 수동 다운로드 오류 등으로 인해 보석이 손상된 경우가 가장 자주 나타납니다. 다시 시도하거나 보석을 수동으로 다운로드하고 gem을 파일에 지정하십시오.

0

다른 작업을 수행하기 전에 ZLib을 업데이트 해보십시오. 그래서 ZLib 이전 버전이 문제가 자리하고있는 곳이 될 수 있습니다 (현재 1.2.3입니다) 생각 ...

5

찾을 - 나는 유사한 OS의 X에 대한 문제와 Compress::Zlib를 업데이트 (ZLIB에 펄 인터페이스)가 치료를했다 그것! 나는 윈도우에서 같은 문제를 겪었다. (업데이트없이 갑자기 나왔지만 무엇이든간에) :

이것은 여러 충돌하는 zlib 버전과 관련이있다.

ruby ​​/ lib/ruby ​​/ 1.8/i386-msvcrt에서 zlib.so 파일이 있는지 확인하십시오. 제 경우에는 이미있었습니다. 그렇지 않다면, ruby-zlib를 설치해보십시오.

그런 다음 ruby ​​/ lib/ruby ​​/ site_ruby/1.8./i386-msvcrt로 이동하여 zlib.so 파일을 삭제하십시오.

ruby ​​/ bin에는 zlib1.dll이 있어야합니다. 웬일인지 내 루비 버전은이 DLL을 사용하지 않았다. 가장 최근 버전 (1.2.3)을 다운로드하여 설치했습니다. zlib.dll을 사용하기 위해 이름을 바꿔야했습니다.

그리고 타다! 루비 젬은 다시 일했다.

희망이 도움이됩니다.

+0

저에게있어서'ruby/bin/zlib1.dll'의 이름을'zlib.dll'로 변경해야만했습니다. 그것은 모든 것을 고쳤습니다. – Andrew

+0

젬이 작동하지 않으면 어떻게 windows에 ruby-zlib을 설치할 수 있습니까? – Automatico

0

zlib.dll-ruby/bin/zlib1.dll은하지 않으려 고하는 데 도움이 모든 다른

1

경우 gem update --system없는 일을 실패하면 순수한 루비 ZLIB를 설치하고 이름을 변경 :

:

파일 열기 RUBY_DIR\lib\ruby\site_ruby\1.8\rubygems.rb

을 그리고 대체이에 의해 def self.gunzip(data)을 존재

def self.gunzip(data) 
    require 'stringio' 
    require 'zlib' 
    data = StringIO.new data 

    # Zlib::GzipReader.new(data).read 
    data.read(10) # skip the gzip header 
    zis = Zlib::Inflate.new(-Zlib::MAX_WBITS) 
    is = StringIO.new(zis.inflate(data.read)) 
    end 
4

첫째, 재치있는 사람에게 감사드립니다. h 누락 된 zlib 문제에 대한 해결책. (나는 아니었다. :-)

유감스럽게도 나는 원래의 게시에 대한 링크를 잃어 버렸지 만, Linux에서의 솔루션의 핵심은 zlib 헤더 파일을 Ruby 구성 스크립트에서 사용할 수있는 동안 Ruby를 컴파일하는 것이다. 데비안에서는 루비를 컴파일하기 전에 zlib 개발 패키지를 설치해야합니다.

나머지 텍스트는 여기에 새로운 내용이 없으므로 UNIX와 유사한 운영 체제에서 실행 환경을 사용자 지정하는 것을 편하게 생각하면 생략해야합니다. 다음은 몇 가지 기본 사항에 대한 간략한 소개와 단계별 지침을 결합한 것입니다.

------ 더 - 시작 - 중 --HOW-TO -------------------------

프로그램을 실행하고 싶다면, 콘솔에서 irb라고 가정 해 봅시다. irb라는 이름의 파일은 PATH라는 환경 변수에 의해 설명 된 순서대로 폴더에서 검색됩니다. 그것은 bash 쉘에 입력하여 PATH의 값을 볼 수있어 (키를 눌러 키 입력) : 예를 들어

echo $PATH 

, "공식적인"에 의해 설치된 시스템의 IRB의 2 개 버전 하나가있는 경우 패키지 관리 시스템, yum 또는 apt-get을/usr/bin/irb라고하고, scoobydoo라는 사용자가 컴파일하고/home/scoobydoo/ourcompiledruby/bin에있는 다른 패키지를 작성하면 질문이 발생합니다. 두 개의 irb-s가 실행됩니다.

하나는 /home/scoobydoo/.bashrc 광고 등을 기록하는 경우 :

export PATH="/home/scoobydoo/ourcompiledruby/bin:/usr/bin" 

하고 IRB를 입력 한 다음, 단자 창을 폐쇄하고 새로운 열어 배시 쉘을 재시작 콘솔, /home/scoobydoo/ourcompiledruby/bin/irb가 실행됩니다. 하나는 /home/scoobydoo/.bashrc 에

export PATH="/usr/bin:/home/scoobydoo/ourcompiledruby/bin" 

을 썼다면, 다음은/usr/빈/IRB는 실행 얻을 것입니다. 실제로 하나에서

이는 PATH 전에/홈/Scoobydoo의/ourcompiledruby/bin으로이 과제에 있던 모든 값을 앞에 추가합니다 때문에

export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH" 

를 작성하고자합니다. 그렇지 않으면 모든 일반적인 도구가/usr/bin에있는 것은 아니기 때문에 문제가있을 수 있습니다. 아마도 여러 개의 사용자 정의 응용 프로그램을 사용하려고 할 수 있습니다.환경 변수의 이름 LD_LIBRARY_PATH는 LD_LIBRARY_PATH 및 PATH의 사용은 NOT- 실험 할 루트 액세스 권한이 없거나 일반 사용자를 허용

점을 제외

같은 논리는 라이브러리에 적용 신뢰할 수있는 소프트웨어를 구축하고 루트 권한 없이도 사용할 수 있습니다.

이 미니 하우투의 나머지 부분에서는 배포본의 공식 패키지 관리 소프트웨어에 의해 시스템에 설치된 것과 관계없이 우리 자신의 버전의 루비를 만들고 우리 자신의 버전을 사용한다고 가정합니다.

1) =============================

첫째, 하나는 몇 폴더를 생성하고 환경을 설정 변수를 사용하여 폴더가 "유용합니다".

mkdir /home/scoobydoo/ourcompiledruby 
mkdir -p /home/scoobydoo/lib/our_gems 

하나는 전류 단자 창을 폐쇄하고 새로운 열거 나

입력하여 /home/scoobydoo/.bashrc

export PATH="/home/scoobydoo/ourcompiledruby/bin:$PATH" 
export GEM_HOME="/home/scoobydoo/lib/our_gems" 

재시작 배시 쉘 다음 두 라인을 추가 현재 열려있는 윈도우의 명령 행에서

bash 

. /home/scoobydoo/.bashrc에 변경 사항이 /home/scoobydoo/.bashrc 아이디어의 수정 된 버전의 저장 이전에 시작된 터미널 창/세션에 영향을주지 않는 것은 인/가정이 /scoobydoo/.bashrc 한 SSH을 통해 로그온 할 경우에도 세션의 시작시 자동으로 실행됩니다.

2) =============================

지금 하나는 ZLIB 개발 패키지를 사용할 수 있는지 확인합니다 시스템에. 2011 년 4 월 나는 그것의 세부 사항을 분류하지 않은,하지만

apt-get install zlibc zlib1g-dev zlib1g 

는 데비안 시스템에 충분한 것 같다. 아이디어는 모두, 라이브러리 파일과 헤더 파일, 시스템의 "공식"검색 경로에서 사용할 수 있다는 것입니다. 보통은/usr/포함하는 라이브러리 파일은/usr/lib에

3) ===================에 헤더 파일을 apt-get을 비슷하게 장소 ==========

다운로드 및 소스 타르 압축을 풉니 다.http://www.ruby-lang.org

./configure --prefix=/home/scoobydoo/ourcompiledruby 
make 
make install 

4) =============================

콘솔 명령의 경우에서 GZ 콘솔

/home/scoobydoo/ourcompiledruby/bin/ruby 

which ruby 

인쇄와 같은 다음 새로 컴파일 된 버전은 명령에서 실행됩니다 하나입니다

ruby --help 

5) =============================

프로그램의 나머지 부분, 보석, IRB 그것은 그렇게하지 않아야하지만, 2011 년 4 월 나는이 일을 더 우아한 방법을 생각하지 않은

ruby `which gem` install rake 
ruby `which irb` 

: 등, 제대로 같은 명령을 사용하여 실행할 수 있습니다.

ruby `which gem` install rake 

다시 오류를 누락 ZLIB를 제공한다면, 하나는 바로 ZLIB 스크립트를 구성하고 다시 컴파일 루비에 사용할 수있는 파일 및 라이브러리를 포함하는 방법, 알아 내려고 시도해야합니다. (죄송합니다, 현재 내가 제공하는 더 나은 솔루션이 없습니다.)

더러운 솔루션

alias gem="`which ruby` `which gem` " 
alias irb="`which ruby` `which irb` " 

실제로 /home/scoobydoo/.bashrc에 다음 줄을 추가 할 수 있습니다 할 수 있음 , 나는 보통

alias irb="`which ruby` -KU " 

를 사용하지만, 그렇지 않으면 오류가있을 것이기 때문에 보석, 루비은 "-KU"인수를 포기하지 않고 실행해야합니다.

------- 끝 ------------------------

+0

하우투를 보내 주셔서 감사합니다, 그냥 우분투 시스템에서 작동하는 데있어 'apt-get install zlibc zlibc zlib1g-dev zlib1g libxml2-dev' – iain

1

cd에 대해 rubysrc/ext/zlib, 그 다음에 ruby extendconf.rb, 그 다음 make, make install.

그런 다음, 루비를 다시 설치하십시오.

우분투 10.04에서이 작업을 성공적으로 수행했습니다.

+0

정말 고마워요, Nat! – user3931649

관련 문제