ActionDispatch :: Cookies :: CookieOverflow em UsersController # create
Eu tenho este erro quando tento abrir a página. Não sei como depurar esse erro. Você tem alguma sugestão 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
fonte
fonte
Devise
e não reiniciei meu servidor de desenvolvimento depois de executar as migrações. Assim que o fiz, o erro parou.Respostas:
Você tem um limite de 4kb para o que você pode armazenar em um cookie, e quando o Rails converte seu objeto em texto para escrever no cookie, provavelmente é maior que esse limite.
ActionDispatch::Cookies::CookieOverflow
Erro de Ruby on RailsAssim
CookieOverflow
ocorre esse erro.A maneira mais fácil de resolver este é, você precisa alterar seu session_store e não usar o
cookie_store
. Você pode usar oactive_record_store
por exemplo.Aqui estão os passos
Gere uma migração que cria a tabela de sessão
Execute a migração
Modificar
config/initializers/session_store.rb
depara
Depois de realizar as três etapas, reinicie seu aplicativo. O Rails agora usará a tabela de sessões para armazenar os dados da sessão, e você não terá o limite de 4kb.
fonte
active_record_store
joia?Para fazer a
:active_record_store
funcionalidade funcionar no Rails 4/5, você deve adicionar a gem activerecord-session_store ao seuGemfile
:em seguida, execute o gerador de migração:
E, finalmente, defina seu armazenamento de sessão em
config/initializers/session_store.rb
:ATUALIZAR:
Se alguém está recebendo uma
null value in column "session_id" violates not-null constraint
mensagem no rails 4, há uma solução alternativa no github (não testado). Você deve criar um inicializador comActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
fonte
ERROR: null value in column "session_id" violates not-null constraint
Se estiver vendo isso, verifique se não está explodindo alguns dados da sessão. No meu caso, foram milhares da mesma mensagem inseridos na mensagem flash. Apenas dizendo.
Acrescentarei que, se você acha que a solução é aumentar o seu armazenamento de cookies (como a maioria das outras respostas aborda), provavelmente é melhor repensar o que está realmente colocando nos cookies. Se você precisa de mais do que alguns tokens de autenticação, IDs de sessão e talvez alguns cookies de layout / rastreamento, você está vivendo nos anos 90.
fonte
Não é uma boa ideia armazenar um objeto de modelo na sessão.
Confira este railscast neste tópico: http://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true
É uma prática melhor armazenar o id (id do usuário, neste caso) dentro da sessão. Então você não terá esse problema.
(Veja também o comentário de Frederick Cheung acima).
fonte
a mensagem de erro indica claramente o problema com o tamanho do armazenamento de cookies que está excedendo.
Suas sessões (por padrão em cookie) precisam ser movidas para o armazenamento de registro ativo ou armazenamento do memcache para corrigir esse problema.
Para sessões baseadas em dados:
Você precisa criar a tabela de sessão conforme abaixo
OU
Para sessões de Memcache:
Além disso, você precisa configurar um servidor de cache de memória e configurá-lo conforme a seguir:
fonte
Esse erro ocorre porque você está tentando serializar o modelo do usuário. Ao armazenar um objeto em um cookie, o rails usará Marshal.dump, que pode produzir uma grande quantidade de conteúdo, já que está tudo no registro do usuário
Em vez de armazenar o registro real do usuário,
session[:current_user] = user
tente apenas armazenar o ID do usuário e, em seguida, tenha um método para pesquisar o usuário a partir desse, por exemplofonte
Este erro apareceu para mim quando eu estava executando uma especificação. Depois de atualizar o Capivara de 1.x para 2.x. Apenas rake tmp: limpar resolveu.
fonte