Railsでsessionをactive_recordを使って管理をするときにちょっとデータベースの型で詰まったのでメモします。
環境
Ruby 2.1.2
Rails 4.1.6
MySQL
+-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | version | 5.6.21 | | version_comment | Homebrew | | version_compile_machine | x86_64 | | version_compile_os | osx10.10 | +-------------------------+----------+
activerecord-session_store
gem activerecord-session_storeを入れる。Gemfileに追記してbundle installします。
gem 'activerecord-session_store'
active_recordをsession_storeに設定
次にsession_store.rbで:active_record_storeを設定します。デフォルトでは:cookie_storeとなっています。
rb:config/initializers/session_store.rb
Railsapp::Application.config.session_store :active_record_store, key: '_railsapp_session'
マイグレーション
セッションを管理するテーブルを作ります。
bundle exec rails generate active_record:session_migration
class AddSessionsTable < ActiveRecord::Migration def change create_table :sessions do |t| t.string :session_id, :null => false t.text :data, limit: 4294967295 t.timestamps end add_index :sessions, :session_id, :unique => true add_index :sessions, :updated_at end end
マイグレーションファイルが作られますがここで自分の環境ではですが注意すべきことありました。最初、dataカラムを普通にtext型だけでやっていたのですが、それだとフォームが多すぎるせいか以下のエラーが頻発しました。データが大きすぎるそうです。
Data too long for column '' at row 1
なので、MySQLのlongtext型をつかうためにtextにlimitを設定しました。
t.text :data, limit: 4294967295
ちなみに
1 to 255 bytes: TINYTEXT 256 to 65535 bytes: TEXT 65536 to 16777215 bytes: MEDIUMTEXT 16777216 to 4294967295 bytes: LONGTEXT
だそうです。
これでエラーはでなくなりました。
あとはマイグレート実行してOKです。
bundle exec rake db:migrate
再起動はしといてください。
参考
Rails4でsession storeをActiveRecordに変更 | EasyRamble
http://easyramble.com/rails-active-record-session-store.html
Rails 3 Migration with longtext – Stack Overflow
http://stackoverflow.com/questions/4443477/rails-3-migration-with-longtext
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート