0

私は Windows で作業しており、Rails 3.2.12 (アップグレードしたばかり) と Ruby 2.0.0p0 を使用しています。コントローラーを削除しようとすると、次のエラーが発生します。

F:\my apps\meshworks-redo> rails d controller Plans
C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/pg.rb:10:in `require': cannot load such file -- 2.0/pg_ext (LoadError)
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/pg.rb:10:in `rescue in <top (required)>'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/pg.rb:3:in `<top (required)>'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:72:in `require'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:70:in `each'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:70:in `block in require'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:59:in `each'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler/runtime.rb:59:in `require'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/bundler-1.3.2/lib/bundler.rb:132:in `require'
        from F:/my apps/meshworks-redo/config/application.rb:7:in `<top (required)>'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/railties-3.2.12/lib/rails/commands.rb:24:in `require'
        from C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/railties-3.2.12/lib/rails/commands.rb:24:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'

pg gem を再インストールしようとしましたが、うまくいきませんでした。

4

1 に答える 1

2

Postgres を使用して Windows 7 で Ruby 2.0 を使用しているときに、私の友人が同じ問題に遭遇しました。コントローラを破棄しようとするときだけでなく、すべてのデータベース アクション (rake db:create を含む) で発生します。問題は、Ruby 2.0 には pg_ext.so ファイルが含まれていないことです。これは 1.9 に含まれていますが、これを 2.0 にコピーするだけでは機能しないようです。しかし、正しい pg_ext.so を取得する別の方法を見つけました。なぜこれが機能するのか正確にはわかりませんが、彼にとっては機能します。これがあなたがする必要があることです:

  1. 2.0/pg_ext.so (見つからなかったファイル) があるはずのフォルダーに移動します。あなたの場合、C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1-x86-mingw32/lib/.
  2. ここに「2.0」という名前のフォルダー (引用符なし) を作成します。
  3. このフォルダーには、正しい pg_ext.so ファイルが必要です。これは次の方法で取得できます。
  4. pg gem を手動でインストールします (コンソールで「gem install pg」)。これにより、非 x86-mingw32 バージョンの gem がインストールされます。問題は修正されませんが、正しい pg_ext.so が作成されます。これは、システム用に pg gem をコンパイルするためだと思います。つまり、ruby 2.0. その後、この pg_ext.so ファイルを pg x86-mingw32 バージョンで使用できます。pg をコンパイルしてインストールするには、DevKit が必要です ( http://rubyinstaller.org/add-ons/devkit/ )。
  5. pg-0.14.1 gem フォルダー内の pg_ext.so の場所に移動します。あなたの場合、これは C:/Users/rrw/.pik/rubies/Ruby-200-p0/lib/ruby/gems/2.0.0/gems/pg-0.14.1/lib になります。
  6. 手順 2 で作成した pg-0.14.1-x86-mingw32/lib/2.0/ フォルダーに、このフォルダーからファイル pg_ext.so をコピーします。
  7. コマンドを再試行して、すべてが機能するかどうかを確認してください。そうでない場合は、Gemfile.lock を削除して、bundle install を再実行してください。
  8. この gem と同じ問題が、他の mingw32 gem でも発生する可能性があります。たとえば、bcrypt-rails gem で同じ問題が発生しました。上記と同じ手順に従って、問題を修正しました。現在、Windows 7 で Ruby 2.0 を正常に実行しています。

Ps。Windows 7 64 ビットで pg gem を実行する際にその他の問題がある場合は、Ruby の 32 ビット x86 バージョン (RubyInstaller) と postgresql をインストールしてみてください。さらに、パスに Ruby フォルダー (これは、RubyInstaller を使用して Ruby 2.0 をインストールする際のオプションです) と、Postgresql の lib および bin フォルダーが含まれていることを確認してください。

幸運を!

于 2013-03-11T13:41:45.247 に答える