2012-10-12 55 views
0

我讀過Rails 3中的會話是懶加載的,但我沒有看到這種行爲。爲了測試這個,我使用MySQL和activerecord會話存儲創建了一個新的Rails 3.2應用程序。除了V8 JavaScript引擎外,沒有添加任何寶石。然後我用索引操作創建了一個名爲welcome的空控制器。這裏根本沒有代碼。當我打開索引頁面時,我看到在MySQL中的會話表中創建了一個會話。Rails 3 session not lazy loading

我做錯了什麼?我認爲只有我訪問會話纔會創建會話。

+1

我的回答對你有幫助嗎? – scaryguy

+0

是的,謝謝。我開始考慮這個問題,因爲我的會話表在所有網頁抓取工具的製作應用程序中都變得非常龐大。希望能夠以簡單的方式關閉會話(我嘗試過kares session_off但遇到了一些問題)。打算使用cookiestore而不是activerecord存儲,所以我不必一直在db中清理無用的會話。謝謝! – Jason

回答

0

如果您需要停止在數據庫中機器人/抓取工具創建的會話,這是對我工作:

# Save this file as config/initializers/session_store_ext.rb 
# and don't forget to define BOT_REGEX to match bots/crawlers 

class ActiveRecord::SessionStore 
    _set_session = instance_method :set_session 

    define_method :set_session do | env, sid, session_data, options | 
    unless env['HTTP_USER_AGENT'] =~ BOT_REGEX 
     _set_session.bind(self).call env, sid, session_data, options 
    end 

    sid 
    end 

    private :set_session 
end 

我已經寫了一篇博客文章,解釋如何我創造了這個,爲什麼它的作品 - Conditionally Disabling Database Sessions in Ruby on Rails 3