ActionDispatch :: Cookies :: CookieOverflow w UsersController # create
Mam ten błąd, kiedy próbuję otworzyć stronę. Nie wiem, jak zdebugować ten błąd. Czy masz jakieś sugestie dotyczące tego problemu?
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
źródło
źródło
Devise
i nie zrestartowałem mojego serwera programistycznego po przeprowadzeniu migracji. Kiedy to zrobiłem, błąd ustał.Odpowiedzi:
Masz limit 4kb na to, co możesz przechowywać w ciasteczku, a kiedy Railsy konwertują twój obiekt na tekst w celu zapisania w ciasteczku, prawdopodobnie jest większy niż ten limit.
ActionDispatch::Cookies::CookieOverflow
Błąd Ruby on RailsW ten sposób
CookieOverflow
pojawia się ten błąd.Najłatwiejszym sposobem rozwiązania tego problemu jest zmiana pliku session_store i nie używanie rozszerzenia
cookie_store
. Możesz posłużyć sięactive_record_store
przykładem.Oto kroki
Wygeneruj migrację, która tworzy tabelę sesji
Uruchom migrację
Modyfikuj
config/initializers/session_store.rb
zdo
Po wykonaniu trzech kroków uruchom ponownie aplikację. Railsy będą teraz używać tabeli sesji do przechowywania danych sesji i nie będziesz mieć limitu 4kb.
źródło
active_record_store
klejnotu?Aby
:active_record_store
funkcjonalność działała w Railsach 4/5, musisz dodać gem activerecord-session_store doGemfile
:następnie uruchom generator migracji:
I na koniec ustaw swój magazyn sesji w
config/initializers/session_store.rb
:AKTUALIZACJA:
Jeśli ktoś otrzymuje
null value in column "session_id" violates not-null constraint
wiadomość na rails 4, istnieje obejście tego problemu w githubie (nie testowane). Musisz utworzyć inicjator zActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
źródło
ERROR: null value in column "session_id" violates not-null constraint
Jeśli to widzisz, sprawdź, czy nie wysadzasz niektórych danych sesji. W moim przypadku były to tysiące tej samej wiadomości wpompowane w wiadomość flash. Tylko mówię.
Dodam, że jeśli uważasz, że rozwiązaniem jest powiększenie magazynu plików cookie (ponieważ większość innych odpowiedzi adresuje), prawdopodobnie lepiej przemyśleć, co tak naprawdę umieszczasz w plikach cookie. Jeśli potrzebujesz więcej niż kilku tokenów autoryzacji, identyfikatorów sesji i może kilku plików cookie układu / śledzenia, żyjesz w latach 90-tych.
źródło
Przechowywanie obiektu modelu w sesji nie jest dobrym pomysłem.
Sprawdź ten railscast na ten temat: http://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true
Lepszą praktyką jest przechowywanie identyfikatora (w tym przypadku identyfikatora użytkownika) wewnątrz sesji. Wtedy nie będziesz miał tego problemu.
(Zobacz również komentarz Fredericka Cheunga powyżej).
źródło
komunikat o błędzie wyraźnie wskazuje na problem z rozmiarem magazynu plików cookie, który jest przepełniony.
Twoje sesje (domyślnie w plikach cookie) muszą zostać przeniesione do magazynu Active Record lub memcache, aby rozwiązać ten problem.
W przypadku sesji opartych na danych:
Musisz utworzyć tabelę sesji, jak poniżej
LUB
W przypadku sesji Memcache:
Musisz także ustawić serwer pamięci podręcznej i skonfigurować go jak poniżej:
źródło
Ten błąd jest spowodowany tym, że próbujesz serializować model użytkownika Podczas przechowywania obiektu w ciasteczku, szyny użyją Marshal.dump, który może wygenerować dużą ilość treści ponieważ jest to wszystko w rekordzie użytkownika
Zamiast przechowywać rzeczywisty rekord użytkownika,
session[:current_user] = user
spróbuj po prostu zapisać identyfikator użytkownika, a następnie użyj metody, aby wyszukać użytkownika z tego, np.źródło
Ten błąd pojawił się podczas uruchamiania specyfikacji. Po aktualizacji Kapibary z 1.x do 2.x. Po prostu rake tmp: jasne rozwiązane.
źródło