Cookie在轨道应用程序溢出?
UsersController#create中的ActionDispatch :: Cookies :: CookieOverflow
当我尝试打开页面时出现此错误。 我不知道如何debugging这个错误。 你有这个问题的build议吗?
def create @user = User.new(params[:user]) sign_in @user if @user.save @user.folders.create(:folder_name=>"Default Folder", :user_id=>@user.id) flash[:success] = "Welcome to Bunch<it>! " redirect_to @user else @title = "Sign up" render 'new' end end def sign_in(user) cookies.permanent.signed[:remember_token] = [user.id, user.salt] session[:current_user] = user current_user = user end
你可以在cookie中存储4KB的限制,当Rails将你的对象转换为写入cookie的文本时,它可能会超过这个限制。
Ruby on Rails的ActionDispatch::Cookies::CookieOverflow
错误
这样CookieOverflow
错误发生。
解决这个问题最简单的方法是,你需要改变你的session_store,不要使用cookie_store
。 您可以通过示例使用active_record_store
。
这是步骤
-
生成创build会话表的迁移
rake db:sessions:create
-
运行迁移
rake db:migrate
-
修改
config/initializers/session_store.rb
(App)::Application.config.session_store :cookie_store, :key => 'xxx'
至
(App)::Application.config.session_store :active_record_store
一旦你完成了这三个步骤,重新启动你的应用程序。 Rails现在将使用会话表来存储会话数据,并且不会有4kb的限制。
要使Rails 4/5中的:active_record_store
function:active_record_store
,您必须将activerecord-session_store gem添加到您的Gemfile
:
gem 'activerecord-session_store'
然后运行迁移生成器:
rails generate active_record:session_migration
最后在config/initializers/session_store.rb
设置你的会话存储:
Rails.application.config.session_store :active_record_store, :key => '_my_app_session'
更新:
如果任何人null value in column "session_id" violates not-null constraint
收到null value in column "session_id" violates not-null constraint
了rails 4中的null value in column "session_id" violates not-null constraint
消息,那么在github (未testing)中有一个解决方法 。 你必须用ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
创build一个初始化器ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
该错误消息清楚地表明存在溢出的Cookie存储大小的问题。
您的会话(默认情况下,在Cookie中)需要移动到活动logging存储或Memcache存储来解决此问题。
对于数据库会话:
config.action_controller.session_store = :active_record_store
您需要如下创build会话表
rake db:sessions:create rake db:migrate
要么
对于Memcache会话:
config.action_controller.session_store = :mem_cache_store
您还需要设置一个caching服务器并将其configuration如下:
config.cache_store = :mem_cache_store, 'localhost', '127.0.0.1:11211', {:namespace => 'myapp123'}
在会话中存储模型对象并不是一个好主意。
看看这个主题上的这个railscast: http ://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true
在会话中存储id(在这种情况下是用户的id)是一个更好的做法。 那么你不会有这个问题。
(见上面的Frederick Cheung评论)。
我在运行规格时出现了这个错误。 将Capybara从1.x更新为2.x后。 只是耙tmp:清楚解决了它。
如果你看到这个,检查你是不是吹了一些会议的数据。 在我的情况下,成千上万的相同的消息被input到Flash消息中。 只是说。