9

Ruby Gems をインストールして、Twitter メッセージを受信したときに Ruby を使用して通知できるようにしようとしています。ただし、を実行した後、何かgem update --systemを実行しようとするたびに zlib エラーが発生するようになりました。gem install以下は、Ruby gems をインストールしようとしたときに得られるコンソール出力です。(からの出力とともにgem environment)。

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/
4

9 に答える 9

5

それを見つけた!Windowsでも同じ問題が発生しました(更新を行わなくても突然表示されましたが、何でも):

複数の競合する 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 があるはずです。何らかの理由で、私の Ruby バージョンはこの dll を使用しませんでした。最新バージョン (1.2.3) をダウンロードし、そこにインストールしました。使用するには、名前を zlib.dll に変更する必要がありました。

そしてタダ!Rubygems は再び機能しました。

お役に立てれば。

于 2009-09-18T08:19:40.700 に答える
4

まず、欠落している zlib 問題の解決策を思いついた人に感謝します。(それは私ではありませんでした。:-)

残念ながら、元の投稿へのリンクを失ってしまいましたが、Linux でのソリューションの本質は、zlib ヘッダー ファイルを Ruby 構成スクリプトで使用できる状態で Ruby をコンパイルすることです。Debian では、Ruby のコンパイルを開始する前に zlib 開発パッケージをインストールする必要があることを意味します。

ここでの私のテキストの残りの部分には、新しいものは何も含まれていません。UNIX ライクなオペレーティング システムで実行環境をカスタマイズすることに自信がある場合は、省略することをお勧めします。以下は、いくつかの基本事項の簡単な紹介と段階的な手順の組み合わせです。

------HOW-TOのはじまり-------------------------

プログラム、たとえば irb をコンソールから実行したい場合、irb という名前のファイルが、PATH という環境変数によって記述された順序でフォルダーから検索されます。bash シェルに入力して (Enter キーを押すと)、PATH の値を確認できます。

echo $PATH

たとえば、システムに 2 つのバージョンの irb がある場合、1 つは「公式」パッケージ管理システム (yum または apt-get など) によって /usr/bin/irb にインストールされ、もう 1 つはパッケージ管理システムによってコンパイルされます。 scoobydoo という名前のユーザーが /home/scoobydoo/ourcompiledruby/bin に存在する場合、2 つの irb のどちらが実行されるかという問題が生じます。

/home/scoobydoo/.bashrc に次のような行を書き込むと:

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

ターミナル ウィンドウを閉じて新しいウィンドウを開いて bash シェルを再起動し、コンソールに irb と入力すると、/home/scoobydoo/ourcompiledruby/bin/irb が実行されます。誰かが書いた場合

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

/home/scoobydoo/.bashrc に追加すると、 /usr/bin/irb が実行されます。

実際には、書きたい

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

これは、この割り当ての前に PATH が持っていたすべての値を /home/scoobydoo/ourcompiledruby/bin に追加するためです。そうしないと、すべての一般的なツールが /usr/bin にあるとは限らず、おそらく複数のカスタムビルドのアプリケーションを使用する必要があるため、問題が発生します。

環境変数の名前が LD_LIBRARY_PATH であることを除いて、ライブラリにも同じロジックが適用されます。

LD_LIBRARY_PATH と PATH を使用すると、root アクセス権を持っていないか、それほど信頼されていないソフトウェアを試してみたい一般ユーザーが、root 権限を必要とせずにそれらを構築して使用できるようになります。

このミニハウツーの残りの部分では、ディストリビューションの公式パッケージ管理ソフトウェアによってシステムに何がインストールされているかに関係なく、独自のバージョンの ruby​​ を構築し、独自のバージョンの Ruby を使用することを前提としています。

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

まず、いくつかのフォルダーを作成し、環境変数を設定して、フォルダーが「役立つ」ようにします。

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

次の 2 行を /home/scoobydoo/.bashrc に追加します。

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

現在のターミナル ウィンドウを閉じてから新しいウィンドウを開くか、次のように入力して、bash シェルを再起動します。

bash

現在開いているウィンドウのコマンドラインで。/home/scoobydoo/.bashrc への変更は、変更されたバージョンの /home/scoobydoo/.bashrc を保存する前に開始された端末ウィンドウ/セッションには影響しません。 /.bashrc は、ssh 経由でログオンした場合でも、セッションの開始時に自動的に実行されます。

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

ここで、zlib 開発パッケージがシステムで利用可能であることを確認します。2011年4月現在、詳細は整理できていませんが、

apt-get install zlibc zlib1g-dev zlib1g

Debian システムでは十分なようです。ライブラリ ファイルとヘッダー ファイルの両方が、システムの「公式」検索パスで利用できるという考え方です。通常、apt-get などは、ヘッダー ファイルを /usr/include に配置し、ライブラリ ファイルを /usr/lib に配置します。

3)=============================

http://www.ruby-lang.orgからソース tar.gz をダウンロードして解凍します。

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

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

次のようなコンソールコマンドの場合

which ruby

コンソールに出力します

/home/scoobydoo/ourcompiledruby/bin/ruby

新しくコンパイルされたバージョンは、コマンドで実行されるバージョンです

ruby --help

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

残りのプログラム、gem、irb などは、次のようなコマンドを使用して適切に実行できます。

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

そんなはずはありませんが、2011 年 4 月の時点で、これ以上エレガントな方法は思い浮かびませんでした。もし

ruby `which gem` install rake

zlib missing エラーが再び発生する場合は、zlib インクルード ファイルとライブラリを Ruby 構成スクリプトで使用できるようにして再コンパイルする方法を見つけようとする必要があります。(申し訳ありませんが、現在、提供できるより良い解決策はありません。)

次の行を /home/scoobydoo/.bashrc に追加するのが汚い解決策かもしれません

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

実は普段使っている

alias irb="`which ruby` -KU "

ただし、エラーが発生するため、ルビに「-KU」引数を指定せずに gem を実行する必要があります。

------ハウツーの終わり------------------------

于 2011-04-27T10:26:36.363 に答える
3

今夜もこれを手に入れ始めました。グーグルは結果をもたらさなかったたくさんの提案を出しました

gem update --system

そして、package.rbの関数を置き換えることになっている、jamisからのコードの一部を貼り付けますが、置き換えることになっている元のコードはどこにも見つかりません。

rubygemsを再インストールしても役に立ちませんでした。私は今ルビーを再インストールしています.........そしてそれは修正されました。でも痛み。

于 2008-09-20T23:03:25.863 に答える
2

rubysrc/ext/zlib に cd して、ruby extendconf.rb次に.makemake install

その後、ruby を再インストールします。

ubuntu 10.04でこれを行い、成功しました。

于 2012-07-30T12:27:35.097 に答える
1

ほとんどの場合、ダウンロードが失敗したときに表示されます。つまり、gem が破損している、ネットワークのタイムアウト、手動ダウンロードの失敗などです。もう一度やり直すか、gem を手動でダウンロードgemしてファイルを指定してください。

于 2008-09-21T07:46:59.177 に答える
1

うまくいかない場合gem update --systemは、名前ruby/bin/zlib1.dllzlib.dllnot に変更してみてください。

ファイルを開く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
于 2010-09-06T07:25:34.723 に答える
1

Ruby を再インストールすると、この問題が解決されました。それは私が望んでいたものではありません。問題が発生した理由を知りたかったのですが、すべて整理されています。

于 2008-08-27T16:42:52.540 に答える
0

他のすべてが失敗した場合は、純粋なrubyzlibをインストールします

于 2009-10-21T12:31:47.550 に答える
0

他のことをする前に、 ZLibを更新してみてください。OS X でも同様の問題があり、Compress::Zlib (ZLib への Perl インターフェイス) を更新することで解決しました。そのため、ZLibの古いバージョン(現在は 1.2.3) が問題の原因である可能性があります...

于 2009-08-14T09:19:27.020 に答える