3

この投稿を見ました:

Rails/ActiveRecord/SQLite3: テスト環境でレコードを保存できません

また、sqlite バージョンを最新 (3.7.17) にアップグレードした後も、次のエラーが発生します。

ActiveRecord::StatementInvalid: SQLite3::SQLException: 「SAVEPOINT」付近: 構文エラー: SAVEPOINT active_record_1

いつでも何かを作成しようとします。フィクスチャをロードするだけであれば、すべて問題ありません。

「rails db」を実行して、rails が更新された sqlite3 バージョンを使用していることを確認しました。

私の開発環境では、一日中エラーなしでオブジェクトを作成できます (作成後にオブジェクトに別のオブジェクトを作成させることさえできます)。

これが起こっている私のテスト環境の特別な点は何ですか? どうすれば修正できますか?

編集:

テスト データベースを削除し、rake:db:create と rake:db:migrate をやり直しても、同じ問題が発生します。

「Rails コンソール テスト」を実行すると、テスト環境を問題なく使用できるようになり、1 日中オブジェクトを作成して既存のフィクスチャを確認できます。エラーが発生するのは、「rake test:units」と入力したときだけです... (最初はエラーがありましたが、1 つのエラーは正当なものでした (なぜ開発環境でエラーが発生しなかったのかわかりません。アダプターエラーは、明らかに「rails console RAILS_ENV="test" を実行することになっていないため、"RAILS_ENV=test" という環境用のアダプターを探していたためです)

編集:「gem uninstall sqlite3」と入力すると、アンインストールされます。次に「bundle install」と入力すると、再インストールに問題があります...現在作業中です。

    /home/jenny/.rvm/rubies/ruby-1.9.3-p0/bin/ruby extconf.rb --with-sqlite3-dir=/usr/local/bin/sqlite3 checking for sqlite3.h... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.  Check

詳細については、mkmf.log ファイルを参照してください。構成オプションが必要な場合があります。

「gem install sqlite3」を個別に入力すると、問題なく動作し、「bundle install」で動作します。ただし、「rake test:units」には同じエラーがあります。

編集:「which sqlite3」と入力すると、「/usr/local/bin/sqlite3」が出力されます

私は sqlite3 ヘッダーが存在することさえ知らなかったので、それらをインストールしたとは思えません。これを確認する方法を見つけて、それが役立つかどうかを確認します。

編集:

メイン サイトで sqlite3 ヘッダーをダウンロードする場所がどこにもありません。ソースとプリコンパイル済みの Linux バイナリだけです。ソースに特別なヘッダーはないようですが、あったとしてもプリコンパイル済みバイナリに含まれるのではないでしょうか?

編集: gem を手動でインストールしたときに発生しないバンドラー sqlite3 インストール エラーへのリンク

http://pastie.org/8063577

編集:デバイスの問題ではありません。そうだと思ったのですが、テスト コードではなく、フィクスチャで別のオブジェクトを作成しているだけであることがわかりました。

そのため、デバイス ユーザーまたはその他のタイプのオブジェクトをフィクスチャで 1 日中作成できますが、単体テストで作成しようとすると、セーブ ポイント エラーが発生します。単体テストでフィクスチャを保存しようとする場合も同じです。

4

1 に答える 1

0

あなたの問題は、ローカルの sqlite を更新したが、その後 sqlite3 gem を再インストールしていないという事実に関連している可能性が最も高いです。

次の手順に従うことをお勧めします。

  1. gem 'sqlite3'Gemfile から対応する行を削除します
  2. 走るbundle install
  3. 走るgem uninstall sqlite3
  4. gem 'sqlite3'をGemfileに戻します
  5. bundle installもう一度実行

単純gem uninstallに. bundle install_ Gemfile.lockただし、現在は別のより更新されたローカル バージョンを使用しているため、必要に応じて Bundler が新しいバージョンをインストールできるようにする方が安全です。

于 2013-06-20T14:48:11.923 に答える