25

के लिए अपरिभाषित विधि `डेटाबेस_authenticatable 'क्विज़ के आधार पर मैं अपने छोटे एप्लिकेशन के लिए सक्रिय व्यवस्थापक मणि का उपयोग कर रहा हूं। लेकिन जब मैं रेक डीबी निष्पादित करता हूं: माइग्रेट यह मुझे त्रुटि देता है। निम्न आदेश का पता लगाने है:# <ActiveRecord :: कनेक्शनएडाप्टर :: तालिका परिभाषा: 0x9dee690>

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 की सामग्री

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 

मैं ऊपर जारी करने के लिए खोज की है और मिल गया है:

$ 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 मेरी GemFile है this, लेकिन इससे मुझे मदद नहीं मिली है। हर जगह मुझे केवल यह समाधान मिला। क्या कोई इससे पहले इस मुद्दे पर आया है, यदि हां, तो इससे निपटने के लिए आपने क्या किया? इस पर किसी भी मदद की सराहना की जाएगी। धन्यवाद

उत्तर

7

मेरे पास बस यही था जो मुझे लगता है कि एक ही मुद्दा है, मैंने अपना मणि अपडेट किया, और अपना डीबी गिरा दिया, बाद में मुझे एक बहुत ही समान संदेश मिला, फिर मैंने तुलना करने के लिए एक नया रेल ऐप बनाया और यह माइग्रेशन को बदल गया फ़ाइल बदल दी गई है, अब इसमें कॉलिंग विधियों के बजाय कॉलम शामिल हैं।

मुझे उम्मीद है कि यह मदद करता है।

चीयर्स!

+0

धन्यवाद आदमी। यह काम कर रहा है। यह वही मुद्दा था, माइग्रेशन फ़ाइल में विधि नाम बनाने के बजाय कॉलम नाम थे। – lucifer

+0

क्या आप इस उत्तर में माइग्रेशन कोड डाल सकते हैं। – baash05

43

मैं अपने मौजूदा ऐप पर भी इस मुद्दे में भाग गया क्योंकि मैंने एक नए स्टेजिंग सर्वर पर तैनाती करने की कोशिश की थी।

यह साबित हुआ कि डेविस मणि को 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

इसके अलावा, कैसे सही ढंग से मौजूदा माइग्रेशन को समायोजित करने के लिए दस्तावेज़ के माध्यम से पढ़ लें इस में दो बार चलाने के लिए और वहाँ एक बहुत आसान उपाय है - के बजाय डाटाबेस माइग्रेशन की, इस चलाएँ:

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

तो:

rake db:schema:load 
+0

रेक डीबी: रेक डीबी बनाएं: स्कीमा: लोड ये दो आदेश मेरे लिए काम करते हैं। –

+0

यह माइग्रेशन टूटा हुआ छोड़ देता है। शायद एक अच्छा विचार नहीं है। – eagspoo

+0

यह कब एक मुद्दा बन जाएगा? – Jwan622

3

मुझे लगता है कि समस्या Devise 2.0 माइग्रेशन स्कीमा शैली में परिवर्तनों के परिणामस्वरूप हो सकती है। नीचे दिए गए लिंक पर नया स्कीमा प्रारूप देखें। तदनुसार माइग्रेशन अपडेट करें और पुनः प्रयास करें। यह विशेष रूप से #heroku

https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

1

नए के साथ मेरे लिए काम किया और इस साइट पर आप मेरे प्रतिनिधि की ओर से देख सकते हैं। जॉन कामचौ सही है, आपको अपने संस्करण के अनुसार xxxx_devise_create_users.rb माइग्रेशन को बदलने की जरूरत है।

उदाहरण के लिए मैंने अभी रेलवे 3.2 से 4 अपडेट किया है।

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

पुराना सवाल लेकिन उम्मीद है कि इस मदद करता है अगर किसी की तलाश में आता है - 2 को अद्यतन करने के हिसाब से वसीयत और मैं बाहर बदलने के लिए पदावनत था -

t.database_authenticatable :null => false 

के लिए।