2

で作成された「古い」ものと新しいものの2つのレールアプリケーションがあります

    $ rails new blog -d postgresql

サーバーを起動しようとすると、「古い」アプリケーションで問題なく動作します。

    $ rails s -p 2000
    => Booting WEBrick
    => Rails 3.2.8 application starting in development on http://0.0.0.0:2000
    => Call with -d to detach
    => Ctrl-C to shutdown server
    [2012-09-17 16:28:48] INFO  WEBrick 1.3.1
    [2012-09-17 16:28:48] INFO  ruby 1.9.3 (2012-04-20) [x86_64-linux]
    [2012-09-17 16:28:48] INFO  WEBrick::HTTPServer#start: pid=9377 port=2000

しかし、「新しい」アプリケーションでは失敗します:/

    $ rails s -p 2000
    /usr/local/share/gems/gems/pg-0.14.1/lib/pg.rb:4:in `require': cannot load such file -- pg_ext (LoadError)
    from /usr/local/share/gems/gems/pg-0.14.1/lib/pg.rb:4:in `<top (required)>'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler/runtime.rb:68:in `require'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler/runtime.rb:66:in `each'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler/runtime.rb:66:in `block in require'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler/runtime.rb:55:in `each'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler/runtime.rb:55:in `require'
    from /usr/local/share/gems/gems/bundler-1.1.5/lib/bundler.rb:119:in `require'
    from /home/alex/tmp/RoR/blog/config/application.rb:7:in `<top (required)>'
    from /usr/local/share/gems/gems/railties-3.2.8/lib/rails/commands.rb:53:in `require'
    from /usr/local/share/gems/gems/railties-3.2.8/lib/rails/commands.rb:53:in `block in <top (required)>'
    from /usr/local/share/gems/gems/railties-3.2.8/lib/rails/commands.rb:50:in `tap'
    from /usr/local/share/gems/gems/railties-3.2.8/lib/rails/commands.rb:50:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

pg_ext.so をモジュール パスにコピーまたはシンボリック リンクすると修正できます。

    # ln -s /usr/local/share/gems/gems/pg-0.14.1/ext/pg_ext.so /usr/local/share/gems/gems/pg-0.14.1/lib

または、boot.rb に要件を直接追加できます。

    require 'rubygems'
    require 'pg'

しかし、それは受け入れられる解決策ではなく、最初のアプリケーションではなぜ機能し、新しいアプリケーションでは機能しないのか疑問に思っています。構成ファイルの比較に一日中費やしましたが、成功しませんでした。

4

1 に答える 1

1

Fedora 18にアップグレードした後、同じ問題が発生しました。

pg_extは、gemupdateの実行時にビルドされます。

そのための前提条件は、postgresql-develがインストールされていることです。

于 2013-01-30T19:43:06.307 に答える