ActionDispatch :: Cookies :: CookieOverflow en UsersController # create
Tengo este error cuando intento abrir la página. No sé cómo depurar este error. ¿Tiene alguna sugerencia para este problema?
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
ruby-on-rails
erogol
fuente
fuente
Devise
y no había reiniciado mi servidor de desarrollo después de ejecutar las migraciones. Una vez que lo hice, el error se detuvo.Respuestas:
Tiene un límite de 4kb sobre lo que puede almacenar en una cookie, y cuando Rails convierte su objeto en texto para escribir en la cookie, probablemente sea mayor que ese límite.
ActionDispatch::Cookies::CookieOverflow
Error de Ruby on RailsDe esa forma se
CookieOverflow
produce este error.La forma más sencilla de resolver este problema es cambiar su session_store y no usar el
cookie_store
. Puede utilizar elactive_record_store
ejemplo.Aquí están los pasos
Genera una migración que crea la tabla de sesiones.
Ejecuta la migración
Modificar
config/initializers/session_store.rb
desdea
Una vez que haya realizado los tres pasos, reinicie su aplicación. Rails ahora usará la tabla de sesiones para almacenar datos de sesión, y no tendrá el límite de 4kb.
fuente
active_record_store
gema?Para que la
:active_record_store
funcionalidad funcione en Rails 4/5, debe agregar la gema activerecord-session_store a suGemfile
:luego ejecute el generador de migración:
Y finalmente configure su tienda de sesiones en
config/initializers/session_store.rb
:ACTUALIZAR:
Si alguien recibe un
null value in column "session_id" violates not-null constraint
mensaje en rails 4, hay una solución en github (no probada). Debes crear un inicializador conActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
fuente
ERROR: null value in column "session_id" violates not-null constraint
Si está viendo esto, verifique que no esté explotando algunos datos de la sesión. En mi caso, fueron miles del mismo mensaje bombeado al mensaje flash. Solo digo.
Agregaré que si cree que la solución es hacer que su tienda de cookies sea más grande (como se aborda la mayoría de las otras respuestas), probablemente sea mejor que reconsidere lo que realmente está poniendo en las cookies. Si necesita más de un par de tokens de autenticación, ID de sesión y tal vez algunas cookies de diseño / seguimiento, está viviendo en los años 90.
fuente
No es una buena idea almacenar un objeto modelo en la sesión.
Vea este railscast sobre este tema: http://railscasts.com/episodios/13-dangers-of-model-in-session?autoplay=true
Es una mejor práctica almacenar la identificación (identificación del usuario en este caso) dentro de la sesión. Entonces no tendrás este problema.
(Véase también el comentario anterior de Frederick Cheung).
fuente
el mensaje de error indica claramente el problema con el tamaño de la tienda de cookies que se desborda.
Sus sesiones (de forma predeterminada en cookies) deben trasladarse a la tienda de registros activa o la tienda de Memcache para solucionar este problema.
Para sesiones basadas en datos:
Necesita crear la tabla de sesiones como se muestra a continuación
O
Para sesiones de Memcache:
También necesita configurar un servidor de memoria caché y configurarlo de la siguiente manera:
fuente
Ese error se debe a que está intentando serializar el modelo de usuario. Al almacenar un objeto en una cookie, los rieles utilizarán Marshal.dump, que puede producir una gran cantidad de contenido, ya que está todo en el registro del usuario.
En lugar de almacenar el registro de usuario real,
session[:current_user] = user
intente simplemente almacenar la ID de los usuarios, luego tenga un método un método para buscar al usuario a partir de eso, por ejemplofuente
Este error apareció para mí cuando estaba ejecutando especificaciones. Después de actualizar Capybara de 1.xa 2.x. Solo rake tmp: clear lo resolvió.
fuente