1

私はruby1.8.7(ネイティブコンパイル済み)、rails 2.3.4、OSX 10.6.2、そしてsqlite3-rubyを入手しました。

Railsアプリにアクセスするときに発生するエラーは

NameError:初期化されていない定数SQLite3 :: Driver :: Native :: Driver :: API

歴史
FWケーブルを搭載したアプリを古いMacBookから新しいMacBookに移行して、ユキヒョウにアップグレードしました。すべてが数か月間完全に実行されていましたが、昨日、libsqlite3.dylibの「間違ったアーキテクチャ」エラーのためにビルドされなかったrb-appscriptに依存するwatirをインストールする必要がありました。ビルドは古いマシンで行われたと思ったので、sqlite3-rubyを再構築したいと思いました。

$sudogemアンインストールsqlite3-ruby

$ sudo gem install sqlite3-ruby

ネイティブ拡張機能の構築。これにはしばらく時間がかかる場合があります...
エラー:sqlite3-rubyのインストール中にエラーが発生しました:
エラー:gemネイティブ拡張機能のビルドに失敗しました。

/usr/local/bin/ruby extconf.rb
-lrtでfdatasync()を
チェックしています...いいえsqlite3.hをチェックしています...はい
-lsqlite3でsqlite3_open()をチェックしています...いいえ
*extconf.rbが失敗しました*
何らかの理由でMakefileを作成できませんでした。おそらく、
必要なライブラリやヘッダーが不足しています。詳細については、mkmf.logファイルを確認して
ください。構成オプションが必要になる場合があります。

sqlite3ライブラリが正しく機能していないようです。macports sqlite3(sudo port install sqlite3)をインストールして代わりに使用しようとしましたが、同じ結果になりました...したがって、sqlite3を最初から再構築します。download-> configure-> make->makeinstall。その後、gemは完全にビルドされますが、Railsでは機能しないため、この記事の上部にエラーがあります。

次のことを試したので、ここからどこに行けばいいのかよくわかりません

  1. 最新のソースからsqlite3を再構築します(http://www.sqlite.org/download.html
  2. sqlite3-rubyを再インストールしました(sudo gem install sqlite3-ruby && sudo gem install sqlite3-ruby)
  3. macportsからsqlite3を使用しました(sudo port install sqlite3 && sudo gem install sqlite3-ruby)
  4. railsを再インストールし(sudo gem install rails sqlite3-ruby)、environment.rbをrails2.3.5に更新しました。

いいえ、まだこのエラーが発生します:

NameError:初期化されていない定数SQLite3 :: Driver :: Native :: Driver :: AP
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:in /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in`initialize'から 'open'const_missing'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76:in

ところで、私はSnowLeopardCDからXcodeをインストールしています。

問題を解決するために何ができますか?

4

5 に答える 5

5

私の問題は少し異なり、実際、オンラインで見つけた解決策はどれも機能しませんでした。

Snow Leopard と XCode 4.0 の試用版にアップグレードした後、sqlite3-ruby をインストールしようとすると、メッセージが表示されました。

checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... no
sqlite3 is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite3-devel'

ただし、sqlite3がインストールされており、再インストールしても役に立ちませんでした。以前に 64 ビット バージョンとユニバーサル バージョンで問題がありましたが、それも解決しました。実際、私は sqlite3 で作業できました。

したがって、gem install も次の行に沿って何かを教えてくれるはずです。

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 for inspection.

したがって、そのディレクトリにcdしてextconf.rbを探します。私のものは./ext/sqlite3/extconf.rbにあり、rubyが次を使用してsqlite3ライブラリをチェックしていることがわかりました

asplode('sqlite3') unless find_library 'sqlite3', 'sqlite3_libversion_number'

そこで、irb を起動して、これが機能しない理由を確認しました。

  require 'mkmf'
   find_library 'sqlite3', 'sqlite3_libversion_number'

実際、これは機能し、私のルビーはライブラリを見つけます。では、セットアップから機能しないのはなぜですか?extconf.rb を詳細に調べると、次の行が示されました。

  sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr'])

これをirbで実行すると:

require 'mkmf'
  sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr']) 
  find_library 'sqlite3', 'sqlite3_libversion_number'

驚くべきことに、ライブラリはもう見つかりません。実際、これがどのようになるかはわかりませんが、それが起こります。

これが治療法です:行をコメントアウトします

sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr'])

extconf.rbで

次に、 /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 から発行しました

 sudo ruby ./setup.rb

これは問題なく完了しました(sqlite =行をコメントアウトする前に試しましたが、機能しませんでした)

sqlite で問題があった ruby​​ アプリケーションを再起動しました。正常に動作します。

これが誰かを助けることを願っています。

アイスクリーム

于 2010-08-26T11:12:58.637 に答える
2

答えてくれてありがとう。問題を解決するために私がしたことは次のとおりです。

  1. ruby1.8.7 を /usr/local に完全に再インストールします。こちらを参照してください: http://hivelogic.com/articles/ruby-rails-leopard

    注: Mac で ruby​​ を再コンパイルするときに readline が機能しなかったため、これもゼロからビルドし、 --with-readline-dir オプションを追加して構成する必要がありました。

    ./configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1 --prefix=/usr/local --with-readline-dir=/usr/local

  2. /usr/local への sqlite3 の完全な再インストール

  3. sudo gem install XXX を使用して、システム上のすべての gem (sqlite3-ruby を含む) を再構築します。これはプラットフォーム固有のgemでのみ必要ですが、すべてをワンライナーにインストールするだけでより高速であることがわかりました:

    sudo gem install gem1 gem2 ... gemN --no-ri --no-rdoc

ruby1.9 で行こうとしましたが、gem とプラグインの依存関係が壊れているためにすべてが機能しなくなりました。そのため、重いデバッグが必要で、古いシステムを復元する方法を知っていない限り、1.9 に切り替えることはお勧めしません。

最後に、すべてが再び実行されます!

于 2009-12-28T14:24:56.463 に答える
0

Snow Leopard 64を使用していて、このmacportをインストールするときにこの問題が発生した場合は、問題が修正されました。

sudo port install rb-sqlite3 +universal
于 2010-05-13T17:17:58.950 に答える
0

これについては、次の Don Park のブログでいくつかのガイダンスを見つけました。

http://blog.docuverse.com/2009/09/24/installing-sqlite3-ruby-gem-on-snow-leopard/

彼の解決策は、次のスレッドのスタック オーバーフローを指しています。

Snow Leopard、sqlite3-ruby

ln コマンドに関する回答は、私の問題を解決したようです。それがあなたにも役立つことを願っています。

于 2009-12-26T10:10:26.753 に答える
0

gem がビルドされていない場合、ソースから sqlite3 を再ビルドする必要があるからではありませんが、gem をビルドするには sqlite3 開発者ライブラリが必要になります。

ほとんどの Linux/Unix システムでは、「sudo apt-get install sqlite3-dev」を実行してインストールできますが、Macports でどのように機能するかはわかりませんが、そのパッケージがあることを確認してください。gem をインストールするときに、それらがパスにあることを確認するか、それらが存在するディレクトリを渡す必要があります (それを行うためのオプションに関するヒントについては、gem の出力を参照してください)。

Mac で sqlite3 を問題なく実行しています。1.8.7 と更新された 1.9.1 Ruby の両方を使用しています。XCode Developer Tools もインストールされていることを確認することをお勧めします。

于 2009-12-26T14:48:39.447 に答える