私は理解できない、レールの問題が少しあります。
ローカルでは、Mongrelを使ってrails 3.1とruby 1.9.3を実行しています。私はPassanger/Apache2を実行しています。開発環境では、ローカルで実行している間に、私のDBクエリは約40〜50秒かかっています。製品テーブルには約15,000レコード、プレイルームには5,000テーブル、collection_itemには1,700レコードがあります。レールがこれらのテーブル全体に対して選択を行っているように見えますが、これは減速の原因となります。
私のモデル構造の概要を次に示します。
Collection
-- has_many CollectionItems
CollectionItem
-- belongs_to Collection
-- has_many Products
-- has_many Playrooms
Product
-- has_many LineItems
-- belongs_to ProductType
-- belongs_to CollectionItem
Cart
-- has_many LineItems
LineItem
-- belongs_to Product
-- belongs_to Order
-- belongs_to Cart
Here's my log:
Processing by CartController#index as HTML
Cart Load (0.7ms) SELECT `carts`.* FROM `carts` WHERE `carts`.`id` = 7 LIMIT 1
CollectionGroup Load (1.6ms) SELECT `collection_groups`.* FROM `collection_groups` WHERE (status = 'live')
Rendered cart/_checkout_steps.html.erb (1.2ms)
(0.4ms) SELECT COUNT(*) FROM `line_items` WHERE `line_items`.`cart_id` = 7
LineItem Load (2.0ms) SELECT `line_items`.* FROM `line_items` WHERE `line_items`.`cart_id` = 7
Product Load (33592.3ms) SELECT `products`.* FROM `products`
Product Load (1.8ms) SELECT `products`.* FROM `products` WHERE `products`.`id` = 1 LIMIT 1
ProductType Load (181.5ms) SELECT `product_types`.* FROM `product_types`
[paperclip] Duplicate URL for image with /system/:attachment/:id/:style/:filename. This will clash with attachment defined in CollectionItem class
ProductType Load (1.5ms) SELECT `product_types`.* FROM `product_types` WHERE `product_types`.`id` = 1 LIMIT 1
CollectionItem Load (**4701.0ms**) SELECT `collection_items`.* FROM `collection_items`
[paperclip] Duplicate URL for image with /system/:attachment/:id/:style/:filename. This will clash with attachment defined in ProductType class
Collection Load (157.8ms) SELECT `collections`.* FROM `collections`
Playroom Load (18056.7ms) SELECT `playrooms`.* FROM `playrooms`
CollectionItem Load (1.0ms) SELECT `collection_items`.* FROM `collection_items` WHERE `collection_items`.`id` = 1 LIMIT 1
Product Load (1.0ms) SELECT `products`.* FROM `products` WHERE `products`.`id` = 527 LIMIT 1
ProductType Load (1.0ms) SELECT `product_types`.* FROM `product_types` WHERE `product_types`.`id` = 5 LIMIT 1
CollectionItem Load (0.8ms) SELECT `collection_items`.* FROM `collection_items` WHERE `collection_items`.`id` = 31 LIMIT 1
Product Load (0.8ms) SELECT `products`.* FROM `products` WHERE `products`.`id` = 11 LIMIT 1
ProductType Load (0.7ms) SELECT `product_types`.* FROM `product_types` WHERE `product_types`.`id` = 2 LIMIT 1
CollectionItem Load (1.1ms) SELECT `collection_items`.* FROM `collection_items` WHERE `collection_items`.`id` = 2 LIMIT 1
Product Load (1.0ms) SELECT `products`.* FROM `products` WHERE `products`.`id` = 2 LIMIT 1
CACHE (0.0ms) SELECT `product_types`.* FROM `product_types` WHERE `product_types`.`id` = 1 LIMIT 1
CACHE (0.0ms) SELECT `collection_items`.* FROM `collection_items` WHERE `collection_items`.`id` = 1 LIMIT 1
これを生成するコードブロックは次のとおりです:
<% @cart.line_items.each do |line_item| %>
line_item.product.product_type.title
問題はサイト全体で発生していますが、関係を設定した方法に関係していると思います。私は、Railsが製品、プレイルーム、collection_itemsの全テーブルを選択しようとしている理由を特定できません(これは45秒を要します)
また、外部キーのインデックス設定もあります。
どんな考えやアドバイスも感謝します。