25

퀴즈를 기반으로하는 작은 응용 프로그램에 Active Admin gem을 사용하고 있습니다. 하지만 rake db :을 실행하면 오류가 발생합니다. 명령의 추적 다음과 같은 :# <ActiveRecord :: ConnectionAdapters :: TableDefinition : 0x9dee690>에 대한 정의되지 않은 메소드 'database_authenticatable'

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 

내가 위의 문제를 검색하고있어입니다

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' 

내용 20120509055635_devise_create_admin_users.rb의 :

$ 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 

때라도 나의 GemFile입니다 this,하지만 이것은 나를 도와주지 않습니다. 어디서나이 솔루션을 발견했습니다. 이전에이 문제를 경험 한 사람이 있습니까? 그렇다면 문제를 해결하기 위해 무엇을 했습니까? 이것에 대한 도움을 주시면 감사하겠습니다. 감사합니다

답변

7

그냥 같은 문제라고 생각했는데, 내 보석을 업데이 트하고 내 DB를 떨어 뜨 렸어, 나중에 아주 비슷한 메시지가 나타났다. 그런 다음 비교할 새로운 레일 앱을 만들었고 마이그레이션이 나타났다. 파일이 변경되었으므로 메소드를 호출하는 대신 열이 포함됩니다.

도움이되기를 바랍니다.

건배!

+0

고맙습니다. 그 일 했어. 마이그레이션 파일은 메소드 이름 대신에 컬럼 이름을 가지고있었습니다. – lucifer

+0

이 답변에 이전 코드를 올리시겠습니까? – baash05

43

새 스테이징 서버에 배포하려고 할 때 기존 앱에서도이 문제가 발생했습니다.

Devise gem이 2.1로 업데이트되었고 새 버전에서 올바르게 작동하도록 이전을 수정하지 않았 음을 확인했습니다.

것은 자신의 위키 2.1 문서에 자신의 마이그레이션을 통해 읽으십시오 - 나는했습니다 https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

+1

+1 링크를 제공해 주셔서 감사합니다. – abhijit

+0

문제 없습니다. 도움이 되니 기쁩니다! –

12

- 또한 https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.1

제대로 기존의 마이그레이션을 조정하는 방법에 대한 문서를 읽으십시오 이 두 번에 실행하고 정말 쉬운 솔루션이있다 - 대신 DB 마이그레이션이 실행 : 다음

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

:

rake db:schema:load 
+0

rake db : create rake db : schema : load 이 두 명령은 저에게 효과적입니다. –

+0

이렇게하면 마이그레이션이 중단됩니다. 아마도 좋은 생각이 아닙니다. – eagspoo

+0

언제 이것이 문제가됩니까? – Jwan622

1

새로운 나를 위해 일했다. John Kamuchau가 맞습니다. 버전에 따라 xxxx_devise_create_users.rb 마이그레이션을 변경해야합니다.

예를 들어 방금 레일 3.2를 4로 업데이트했습니다.2 따라서 고안 업데이트하고 내가되지 않는 밖으로 변경했다 -

t.database_authenticatable :null => false 

위해 -

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

오래된 질문을하지만, 누군가가보고 온다면이 도움이되기를 바랍니다.

관련 문제