lynndylanhurley / lynndylanhurley/devise_token_auth
DB serialization issue in Rails 5.2.0
- Dominant language
- Ruby
- Stars
- 3.6k
- Forks
- 1.1k
- PR merge metrics
- No merged PRs in 30d
Description
Unfortunately, upgrading to `Rails 5.2.0` (precisely Rails 5.2.0.rc1) with `devise_token_auth (0.1.43.beta1)` is impossible.
I cannot even manage to migrate my test database anymore.
* **error_message:**
`ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError`
```
Column `tokens` of type ActiveRecord::Type::Json does not support `serialize` feature.
Usually it means that you are trying to use `serialize`
on a column that already implements serialization natively.
```
* **culprits:**
```
def tokens_has_json_column_type?
database_exists? && table_exists? && self.columns_hash['tokens'] && self.columns_hash['tokens'].type.in?([:json, :jsonb])
end
```
```
unless tokens_has_json_column_type?
serialize :tokens, JSON
end
```
* **stacktrace:**
```
Caused by:
ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError: Column `tokens` of type ActiveRecord::Type::Json does not support `serialize` feature.
Usually it means that you are trying to use `serialize`
on a column that already implements serialization natively.
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_methods/serialization.rb:74:in `block in serialize'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:73:in `block in apply'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:72:in `each'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:72:in `inject'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:72:in `apply'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:53:in `block in load_schema!'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:52:in `each'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/attribute_decorators.rb:52:in `load_schema!'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/model_schema.rb:458:in `block in load_schema'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/model_schema.rb:455:in `load_schema'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/model_schema.rb:346:in `attribute_types'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/model_schema.rb:370:in `type_for_attribute'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/table_metadata.rb:33:in `type'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/predicate_builder.rb:103:in `block in expand_from_hash'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/predicate_builder.rb:66:in `each'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/predicate_builder.rb:66:in `flat_map'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/predicate_builder.rb:66:in `expand_from_hash'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/predicate_builder.rb:21:in `build_from_hash'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/where_clause_factory.rb:19:in `build'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/relation/query_methods.rb:50:in `not'
(...)/some_migration_file.rb:6:in `up'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:816:in `exec_migration'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:797:in `block (2 levels) in migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:796:in `block in migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:414:in `with_connection'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:795:in `migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:976:in `migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1291:in `block in execute_migration_in_transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1342:in `block in ddl_transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `block in transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/transaction.rb:230:in `block in within_new_transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/transaction.rb:227:in `within_new_transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:212:in `transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1342:in `ddl_transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1290:in `execute_migration_in_transaction'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1262:in `block in migrate_without_lock'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1261:in `each'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1261:in `migrate_without_lock'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1209:in `block in migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1361:in `with_advisory_lock'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1209:in `migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1035:in `up'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/migration.rb:1010:in `migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/tasks/database_tasks.rb:172:in `migrate'
(...)/gems/activerecord-5.2.0.rc1/lib/active_record/railties/databases.rake:60:in `block (2 levels) in '
(...)/gems/railties-5.2.0.rc1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
(...)/gems/railties-5.2.0.rc1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
(...)/gems/railties-5.2.0.rc1/lib/rails/command.rb:48:in `invoke'
(...)/gems/railties-5.2.0.rc1/lib/rails/commands.rb:18:in `'
bin/rails:4:in `require'
bin/rails:4:in `'
```
Contributor guide
Research direction
Start with the tokens_has_json_column_type? check and the serialize :tokens, JSON call shown in the issue, then reproduce the failure while migrating with Rails 5.2.0.rc1 and devise_token_auth 0.1.43.beta1. Done means the test database migration completes without ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rails, ruby
- Domain
- api, authentication, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100