25

Ich benutze Active Admin Gem für meine kleine Anwendung basierend auf Quiz. Aber wenn ich Rake db ausführen: migrieren gibt es mir einen Fehler. Es folgt der Spur des Befehls:undefined Methode `database_authenticatable 'für # <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 ist mein 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' 

Inhalt des 20120509055635_devise_create_admin_users.rb ist

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 

I für die oben Problem gesucht und bekam this, aber das hat mir nicht geholfen. Überall fand ich diese Lösung nur. Ist jemand schon einmal auf dieses Problem gestoßen, wenn ja, was haben Sie getan, um es anzugehen? Jede Hilfe dazu wird geschätzt. Danke

Antwort

7

Ich hatte gerade, was ich denke, ist das gleiche Problem, ich aktualisierte mein Juwel, und ließ meine db, später bekam ich eine sehr ähnliche Nachricht, dann habe ich eine neue Rails App nur zum Vergleich erstellt und es stellt sich heraus, die Migration Datei wurde geändert, jetzt enthält sie die Spalten statt Methoden aufzurufen.

Ich hoffe es hilft.

Prost!

+0

Danke Mann. Hab das gemacht. Das Problem war, dass die Migrationsdatei Spaltennamen statt Methodennamen hatte. – lucifer

+0

könnten Sie bitte den Migrationscode in diese Antworten einfügen. – baash05

43

Ich stieß auch auf dieses Problem in meiner vorhandenen App, als ich versuchte, auf einem neuen Staging-Server bereitzustellen.

Es endete damit, dass das Devise-Juwel auf 2.1 aktualisiert wurde und ich die Migration nicht so eingerichtet hatte, dass sie mit der neuen Version korrekt funktioniert.

Achten Sie darauf, durch ihre Migration auf 2,1 doc auf ihrem Wiki lesen - https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.1

auch sicher, dass durch die doc zu lesen, wie richtig zu bestehenden Migrationen anpassen - https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

+1

+1 Danke für die Links. – abhijit

+0

Kein Problem, froh, dass es geholfen hat! –

12

Ich habe laufen in diese zweimal und es ist eine wirklich einfache Lösung - anstelle von db-Migrationen, führen dies:

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

dann:

rake db:schema:load 
+0

Rake db: create Rake db: Schema: Laden Diese beiden Befehle funktionierten für mich. –

+0

Dies lässt die Migrationen gebrochen. Wahrscheinlich keine gute Idee. – eagspoo

+0

Wann würde das ein Problem werden? – Jwan622

1

Neu auf dieser Seite, wie Sie von meinem rep sehen können. John Kamuchau ist richtig, Sie müssen die xxxx_devise_create_users.rb Migration entsprechend Ihrer Version ändern.

Zum Beispiel habe ich gerade ein Schienen 3.2 bis 4 aktualisiert.2 Aktualisierung ersinnen entsprechend und ich ändern musste aus der veralteten -

t.database_authenticatable :null => false 

für -

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

alte Frage, aber hoffe, das hilft, wenn jemand kommt suchen.