ActionDispatch :: Cookies :: CookieOverflow di UsersController # create
Saya mengalami kesalahan ini saat mencoba membuka halaman. Saya tidak tahu cara men-debug kesalahan ini. Apakah Anda punya saran untuk masalah ini?
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
sumber
sumber
Devise
dan saya belum memulai ulang server pengembangan saya setelah menjalankan migrasi. Setelah saya melakukannya, kesalahan berhenti.Jawaban:
Anda memiliki batas 4kb tentang apa yang dapat Anda simpan dalam cookie, dan ketika Rails mengubah objek Anda menjadi teks untuk ditulis ke cookie, itu mungkin lebih besar dari batas itu.
ActionDispatch::Cookies::CookieOverflow
Kesalahan Ruby on RailsDengan cara itu,
CookieOverflow
Kesalahan ini terjadi.Cara termudah untuk mengatasinya adalah, Anda perlu mengubah session_store Anda dan tidak menggunakan
cookie_store
. Anda dapat menggunakanactive_record_store
dengan contoh.Berikut langkah-langkahnya
Hasilkan migrasi yang membuat tabel sesi
Jalankan migrasi
Ubah
config/initializers/session_store.rb
dariuntuk
Setelah Anda menyelesaikan tiga langkah tersebut, mulai ulang aplikasi Anda. Rails sekarang akan menggunakan tabel sesi untuk menyimpan data sesi, dan Anda tidak akan memiliki batas 4kb.
sumber
active_record_store
permata itu?Agar
:active_record_store
fungsionalitas berfungsi di Rails 4/5, Anda harus menambahkan permata activerecord-session_store keGemfile
:lalu jalankan generator migrasi:
Dan terakhir, setel penyimpanan sesi Anda di
config/initializers/session_store.rb
:MEMPERBARUI:
Jika ada yang menerima
null value in column "session_id" violates not-null constraint
pesan di rel 4, ada solusi di github (belum diuji). Anda harus membuat penginisialisasi denganActiveRecord::SessionStore::Session.attr_accessible :data, :session_id
sumber
ERROR: null value in column "session_id" violates not-null constraint
Jika Anda melihat ini, periksa bahwa Anda tidak meledakkan beberapa data sesi. Dalam kasus saya, ribuan pesan yang sama dipompa ke dalam pesan flash. Hanya mengatakan.
Saya akan menambahkan bahwa jika menurut Anda solusinya adalah membuat penyimpanan cookie Anda lebih besar (karena sebagian besar alamat jawaban lainnya), Anda mungkin lebih baik memikirkan kembali apa yang sebenarnya Anda masukkan ke dalam cookie. Jika Anda memerlukan lebih dari beberapa token autentikasi, ID sesi, dan mungkin beberapa cookie tata letak / pelacakan, Anda hidup di tahun 90-an.
sumber
Bukan ide yang baik untuk menyimpan objek model dalam sesi ini.
Lihat siaran kereta api ini tentang topik ini: http://railscasts.com/episodes/13-dangers-of-model-in-session?autoplay=true
Ini praktik yang lebih baik untuk menyimpan id (id pengguna dalam kasus ini) di dalam sesi. Maka Anda tidak akan mengalami masalah ini.
(Lihat juga komentar Frederick Cheung di atas).
sumber
pesan kesalahan dengan jelas menunjukkan masalah dengan ukuran penyimpanan cookie yang meluap.
Sesi Anda (secara default dalam cookie) perlu dipindahkan ke penyimpanan rekaman aktif atau penyimpanan memcache untuk memperbaiki masalah ini.
Untuk sesi Berbasis Data:
Anda perlu membuat tabel sesi seperti di bawah ini
ATAU
Untuk sesi Memcache:
Anda juga perlu mengatur server cache mem dan mengkonfigurasinya seperti di bawah ini:
sumber
Kesalahan itu karena Anda mencoba untuk membuat serial model pengguna Saat menyimpan objek dalam cookie, rails akan menggunakan Marshal.dump yang dapat menghasilkan konten dalam jumlah besar karena semuanya ada di catatan pengguna
Alih-alih menyimpan catatan pengguna sebenarnya dengan
session[:current_user] = user
mencoba hanya menyimpan ID pengguna kemudian memiliki metode metode untuk mencari pengguna dari itu misalnyasumber
Kesalahan ini muncul untuk saya ketika saya menjalankan spesifikasi. Setelah memperbarui Kapibara dari 1.x ke 2.x. Hanya menyapu tmp: jelas diselesaikan.
sumber