25

Estoy usando Active Admin gem para mi pequeña aplicación basada en Quiz. Pero cuando ejecuto rake db: migrate me da error. A continuación se presenta la traza del comando:método indefinido `database_authenticatable 'para # <ActiveRecord :: ConnectionAdapters :: TableDefinition: 0x9dee690>

$ rake db:migrate RAILS_ENV=production --trace 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Invoke db:load_config (first_time) 
** Invoke rails_env (first_time) 
** Execute rails_env 
** Execute db:load_config 
** Execute db:migrate 
== DeviseCreateAdminUsers: migrating ========================================= 
-- create_table(:admin_users) 
rake aborted! 
An error has occurred, all later migrations canceled: 

undefined method `database_authenticatable' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x9dee690> 
/home/users/Documents/Quiz/db/migrate/20120509055635_devise_create_admin_users.rb:4:in `block in change' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:160:in `create_table' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/connection_adapters /abstract_mysql_adapter.rb:432:in `create_table' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:466:in `block in method_missing' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:438:in `block in say_with_time' 
/home/users/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/benchmark.rb:295:in `measure' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:438:in `say_with_time' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:458:in `method_missing' 
/home/users/Documents/Quiz/db/migrate/20120509055635_devise_create_admin_users.rb:3:in `change' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:407:in `block (2 levels) in migrate' 
/home/users/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/benchmark.rb:295:in `measure' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:407:in `block in migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:119:in `with_connection' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:389:in `migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:528:in `migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:720:in `block (2 levels) in migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:777:in `call' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:777:in `ddl_transaction' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:719:in `block in migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:700:in `each' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:700:in `migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:570:in `up' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:551:in `migrate' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/railties/databases.rake:153:in `block (2 levels) in <top (required)>' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain' 
/home/users/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' 
/home/users/.rvm/gems/ruby-1.9.2-p318/bin/rake:19:in `load' 
/home/users/.rvm/gems/ruby-1.9.2-p318/bin/rake:19:in `<main>' 
Tasks: TOP => db:migrate 

follwoing es mi Gemfile:

source 'https://rubygems.org' 

gem 'rails', '3.2.3' 

# Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' 

gem 'mysql2' 
gem 'devise' 
gem 'activeadmin', :git => 'https://github.com/gregbell/active_admin.git' 
gem 'therubyracer' 
gem 'formtastic' 
gem 'haml' 
gem 'paperclip' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'coffee-rails', '~> 3.2.1' 

    # See https://github.com/sstephenson/execjs#readme for more supported runtimes 
    # gem 'therubyracer', :platform => :ruby 

    gem 'uglifier', '>= 1.0.3' 
end 

gem 'jquery-rails' 

contenido de 20120509055635_devise_create_admin_users.rb es

class DeviseCreateAdminUsers < ActiveRecord::Migration 
    def change 
    create_table(:admin_users) do |t| 
     t.database_authenticatable :null => false 
     t.recoverable 
     t.rememberable 
     t.trackable 

     # t.encryptable 
     # t.confirmable 
     # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both 
     # t.token_authenticatable 


     t.timestamps 
    end 

    # Create a default user 
    AdminUser.create!(:email => '[email protected]', :password => 'password', :password_confirmation => 'password') 

    add_index :admin_users, :email,    :unique => true 
    add_index :admin_users, :reset_password_token, :unique => true 
    # add_index :admin_users, :confirmation_token, :unique => true 
    # add_index :admin_users, :unlock_token,   :unique => true 
    # add_index :admin_users, :authentication_token, :unique => true 
    end 

end 

Busqué el problema anterior y tiene this, pero esto no me ayudó. En todas partes encontré esta solución solamente. ¿Alguno de ustedes se ha encontrado con este problema anteriormente? Si es así, ¿qué hizo para abordarlo? Cualquier ayuda en esto será apreciada. Gracias

Respuesta

7

Acabo de tener lo que creo que es el mismo problema, actualicé mi gema y dejé mi db, luego recibí un mensaje muy similar, luego creé una nueva aplicación de rieles solo para comparar y resulta que la migración archivo ha sido cambiado, ahora incluye las columnas en lugar de llamar a los métodos.

Espero que ayude.

¡Salud!

+0

Gracias hombre. Tengo eso trabajando. Era el mismo problema, el archivo de migración tenía nombres de columna en lugar de idear nombres de método. – lucifer

+0

podría colocar el código de migración en estas respuestas. – baash05

43

También me topé con este problema en mi aplicación existente cuando traté de implementarla en un nuevo servidor de transferencia.

Terminé siendo que la gema Devise se había actualizado a 2.1 y no había corregido la migración para que funcionara correctamente con la nueva versión.

Asegúrese de leer a través de su migración a 2.1 doc en su wiki - https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.1

También, asegúrese de leer a través del documento para saber cómo ajustar correctamente las migraciones existentes - https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

+1

+1 Gracias por los enlaces. – abhijit

+0

¡No hay problema, me alegro de que haya sido útil! –

12

tengo ejecutar en esto dos veces y no hay una solución muy fácil - en lugar de las migraciones db, ejecute lo siguiente:

heroku run rake db:create 
# optionally with --app your_apps_name if you have multiple apps. 

a continuación:

rake db:schema:load 
+0

rake db: create rake db: schema: load Estos dos comandos me funcionaron. –

+0

Esto deja las migraciones rotas. Probablemente no es una buena idea. – eagspoo

+0

¿Cuándo se convertiría esto en un problema? – Jwan622

1

Nuevo en este sitio como se puede ver en mi representante. John Kamuchau está en lo cierto, debe cambiar la migración de xxxx_devise_create_users.rb según su versión.

Por ejemplo, acabo de actualizar los rieles 3.2 a 4.2 actualización de diseñar en consecuencia y tuve que cambiar la obsoleta -

t.database_authenticatable :null => false 

para -

## Database authenticatable 
t.string :email,    null: false, default: "" 
t.string :encrypted_password, null: false, default: "" 

vieja pregunta, pero espero que esto ayude si alguien viene a buscar.

Cuestiones relacionadas