UsersController中的ActionDispatch :: Cookies :: CookieOverflow #create
我尝试打开页面时出现此错误.我不知道如何调试此错误.你对这个问题有什么建议吗?
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
Run Code Online (Sandbox Code Playgroud)
AMI*_*ING 152
你可以在cookie中存储4kb的限制,当Rails将你的对象转换为文本以写入cookie时,它可能大于该限制.
Ruby on Rails ActionDispatch::Cookies::CookieOverflow错误
这样CookieOverflow就会发生此错误.
解决这个问题的最简单方法是,您需要更改session_store并且不要使用cookie_store.您可以使用active_record_store示例.
这是步骤
生成用于创建会话表的迁移
rake db:sessions:create
Run Code Online (Sandbox Code Playgroud)运行迁移
rake db:migrate
Run Code Online (Sandbox Code Playgroud)修改config/initializers/session_store.rb自
(App)::Application.config.session_store :cookie_store, :key => 'xxx'
Run Code Online (Sandbox Code Playgroud)
至
(App)::Application.config.session_store :active_record_store
Run Code Online (Sandbox Code Playgroud)完成这三个步骤后,重新启动应用程序.Rails现在将使用会话表来存储会话数据,并且您将没有4kb的限制.
Alt*_*gos 76
要使:active_record_store功能在Rails 4/5中有效,您必须将activerecord-session_store gem 添加到您的Gemfile:
gem 'activerecord-session_store'
Run Code Online (Sandbox Code Playgroud)
然后运行迁移生成器:
rails generate active_record:session_migration
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
最后将会话存储设置为config/initializers/session_store.rb:
Rails.application.config.session_store :active_record_store, :key => '_my_app_session'
Run Code Online (Sandbox Code Playgroud)
更新:
如果有人null value in column "session_id" violates not-null constraint在rails 4中收到消息,那么在github中有一个解决方法(未经测试).您必须使用创建初始化程序ActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
My *_*God 10
错误消息清楚地表明cookie存储大小溢出的问题.
您的会话(默认情况下在cookie中)需要移动到Active Record store或memcache store来解决此问题.
对于数据库会话:
config.action_controller.session_store = :active_record_store
Run Code Online (Sandbox Code Playgroud)
您需要创建会话表,如下所示
rake db:sessions:create
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
要么
对于Memcache会话:
config.action_controller.session_store = :mem_cache_store
Run Code Online (Sandbox Code Playgroud)
您还需要设置mem缓存服务器并将其配置如下:
config.cache_store = :mem_cache_store, 'localhost', '127.0.0.1:11211',
{:namespace => 'myapp123'}
Run Code Online (Sandbox Code Playgroud)
该错误是因为您正在尝试序列化用户模型在 cookie 中存储对象时,rails 将使用Marshal.dump,它可以产生大量内容,因为它是用户记录中的所有内容
与其存储实际的用户记录,session[:current_user] = user不如尝试只存储用户的 ID,然后使用一种方法来查找用户,例如
def sign_in(user)
...
session[:current_user_id] = user.id
end
def current_user
@current_user ||= User.find(session[:current_user_id])
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59418 次 |
| 最近记录: |