0

他の人が開発した Rails アプリの上にアプリケーション層を開発しています。

彼のアプリケーションは、request_logger というモジュールを使用してテーブルに書き込みます。これは、ruby1.8/rails2/mysql gem では問題なく動作しましたが、私の ruby​​1.9/rails3/mysql2 環境では、activerecord がフォールオーバーし、生成されたクエリが無効であることを示唆しています。

明らかに、すべての mysql リレーション名はバッククォートではなく二重引用符で囲まれています。

activerecord自体への呼び出しは、一連の属性を設定するだけです

log.attributes = {
    :user_id => user_id,
    :controller => controller,
    ...etc
}

そして、呼び出します

log.save

だから私はそれが危険な呼び出しではないことに傾いています。助言がありますか?

4

2 に答える 2

1

mysql2多くの人にとっては問題なく動作しますが、一般的なタスクでのパフォーマンスのために、MySQL C API への準拠を恥ずかしがらずに犠牲にしています。おそらく、 request_logger が十分に低レベルである場合、存在しない呼び出しが存在することを期待しています。

使用に戻すのは簡単mysqlです。試してみて、機能する場合はそのまま使用してください。Gemfileあなたとあなたのconfig/database.yml設定の両方を忘れずに変更してください。

于 2011-04-21T06:00:09.050 に答える
0

これは、Rails 2 と 3 の間の動作の変更と思われるものであることが判明しました (Rails 2 でも同じセットアップが正常に機能しています)。

database.yml を使用して (空の) "マスター" データベースを指定し、クライアントにシャードとオクトパスをフィードします。

マスター データベースは簡単にするために sqlite です。activerecord は、アダプターの種類に関係なく、sqlite 用にフォーマットされたリクエストを mysql2 シャードにフィードしていたようです。

于 2011-04-21T06:39:58.903 に答える