2010-12-30 9 views
1

bandgenreという2つのモデルと、関連テーブルbands_genres(モデルを持たない)との多対多の関係が次のようになっています。私のアプリの出力ログをチェックアウト`Railsリクエストごとに表を書く '

class Genre < ActiveRecord::Base 
    has_and_belongs_to_many :bands 

class Band < ActiveRecord::Base 
    has_and_belongs_to_many :genres 

、私はバンドやジャンルに関係するすべての呼び出しは、このクエリをやって終わることを参照してください。

SQL (1.8ms) describe `bands_genres` 

なぜこの出来事はありますか?どのようにしてこのクエリの結果をキャッシュして、各リクエストでキャッシュしないようにすることができますか?

答えて

4

サーバーを運用モードで実行します。開発モードでは、テーブル情報は各要求に再ロードされます。

rails s -e production 
+0

クール、私はこの動作が生産で同じだろうと思った。ありがとう! – pabloroman

+0

私のポイントを証明するための参照が見つからないため、私は疑問を抱いています。 :) – Heikki

+0

これはHerokuの問題ですが、これをどうやって止めるのか? –

0

あなたの現在の環境設定がそうするように指示しているからです。私はあなたが "開発"を使用すると仮定しますが、あなたは "生産"と "テスト"を持っています。

いずれかのenvの設定でクラスをキャッシュするオプションがあります。現在の(私はあなたが「開発」を使用すると仮定)チェック:

config/environments/development.rb 

をしてtrueには、このオプションを変更します。

# In the development environment your application's code is reloaded on 
    # every request. This slows down response time but is perfect for development 
    # since you don't have to restart the webserver when you make code changes. 
    config.cache_classes = true 

その後、現在の環境で実行するサーバー。開発用:

bundle exec rails s 

で十分です。デフォルトで

1) when Rails start, it will now read all classes' definitions 
    (models) up front, and keep it for each request. 
    When you change a class now, no code will be reloaded automatically 

    2) Rails will not ask database for model metadata change, 
    so no "describe table" will go to database in any request 

"生産" ENV "真" に設定され、このオプションがあります:

これは、2つのことを行います。しかし、 "生産"の環境は、生産のためのものであり、開発のためのものではありません。あなたは、そこにさまざまなオプション、URL、ヴァールを指定することができます。

関連する問題