ActiveRecord for Rails 4'ü devre dışı bırakın


113

Rails 4'te ActiveRecord'u devre dışı bırakmak istiyorum. config/application.rb

require File.expand_path('../boot', __FILE__)

# require 'rails/all'  -- commented

require "action_controller/railtie"
require "action_mailer/railtie"
#require "active_resource/railtie" no need
#require "rails/test_unit/railtie" no need
#require "sprockets/railtie" no need

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)

module MyApp
  class Application < Rails::Application
     config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
  end
end

Bir hatam var

/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/railtie/configuration.rb:95:in 
  method_missing: undefined method active_record for #<Rails::Application::Configuration:0x00000002005c38> (NoMethodError)

4
Neden rails new ... -Oaktif kaydı devre dışı bırakmak için kullanmıyorsunuz?
Yevgeniy Anfilofyev

App_middleware.delete gerekli mi, hatta soruna neden oluyor olabilir mi?
ev 9

Mevcut rails 4/5/6 uygulamaları için, bu yanıtı takiben aktif kaydı devre dışı bırakabilirsiniz .
Alter Lagos

Yanıtlar:


261

Yeni bir uygulama oluşturuyorsanız, -OActiveRecord'u atlamak için kullanabilirsiniz :

rails new my_app -O

Mevcut uygulamalar için:

1. Veritabanı adaptör mücevherlerini Gemfile'ınızdan (mysql2, sqlite3, vb.) Kaldırın.

2. config/application.rb

Kaldır require 'rails/allhattı ve (kişiler arasında çerçeveler gerektiren mevcut sizin de railsörneğin, kullanım istiyorum liste değişir sadece kopyalamayın sürümü):

require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"

Kaldır config.active_record.raise_in_transactional_callbacks = truedanconfig/application.rb

3. config/database.ymlDosyanızı db/schema.rbve taşıma işlemlerini (varsa) silin

4. Taşıma kontrolünü silin test/test_helper.rb

5. config/environmentsDosyalarınızdan herhangi bir ActiveRecord yapılandırmasını silin (bu, hatanıza neden olan şeydir)

Boş bir Rails uygulaması için yapmanız gereken tek şey bu. Mevcut kodunuzun neden olduğu sorunlarla karşılaşırsanız, yığın izleme, değiştirmeniz gerekenler hakkında size yeterli bilgi vermelidir. Örneğin, başlatıcılarınızda bazı ActiveRecord yapılandırmanız olabilir.


2
Bu değişikliklere ek olarak, spec_helpers.rb'den (RSpec kullanarak) demirbaşlar ve işlemler hakkında birkaç satırı da kaldırmak zorunda kaldım. Ben de active_model kullanıyordum, bu yüzden active_record'u buradan gerekli listesindeki active_model ile değiştirdim: stackoverflow.com/questions/19078044/…
arnab

3
'Raylar / tümü' yerine gerekli olması gereken mevcut Rails çerçevelerinin bir listesini nerede görebilirim?
emilesilvis

18
İçerdiği her şeyin listesi buradarequire 'rails/all' bulunabilir .
nates

3
rails new my_app -OBir ay önce bir uygulama oluşturdum . Şimdi aktif kaydı geri istiyorum. Şimdi eklemem gereken dosyalar / taşlar / yapılandırma nedir?
Jak

1
Ayrıca kaldırmak zorunda config.active_record.raise_in_transactional_callbacks = truedan config/application.rb.
B Yedi

15

Merhaba new_app -O'nun verdiği varsayılan raylar budur

require "rails"
# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "rails/test_unit/railtie"

senin içinde config / application.rb

Ek olarak, database.yml ve NO db / migrate / * ve schema.rb olmadan gelir


4
ve raylar için 5 <= addrequire "action_cable/engine"
rails_id

7

Bu, Google'da Rails 5 için aktif kaydı devre dışı bırakmak için arama yaparken hala ilk isabet olduğundan, bunu buraya ekleyeceğim:

Raylar için 5

@Mechanicalfish yanıtındaki tüm adımları uygulayın, ancak satırı da kaldırın

Rails.application.config.active_record.belongs_to_required_by_default = true

itibaren

config/initializers/new_framework_defaults.rb

5

Kullananlar için raylar-api mücevher kullanırken benzer bir hatayla karşılaşabilir --skip-active-recordyaparken bayrağı rails-api new my_api. Geçerli düzeltme (gem'in yeni bir düzeltilmiş sürümü piyasaya sürülene kadar) bu commit'i almak için rails-api gem'inizi düzenlemektir . Eskisini kullanın bundle openve Gemfileyeni düzeltilmiş olanla değiştirin . Yeniden çalıştır ve hazır olmalısın.


4

Rails 4.2'de ActiveRecord'u devre dışı bırakmak için config / initializers / middleware.rb oluşturabilirsiniz.

Rails.application.middleware.tap do |middleware|
  middleware.delete ActiveRecord::Migration::CheckPending
  middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
  middleware.delete ActiveRecord::QueryCache
end

Terminal komisyon ara yazılımına bakın


4

Raylar 5 için:

Yeni bir uygulama oluşturuyorsanız

--skip-active-recordVeritabanı olmadan bir uygulama oluşturmak için seçeneği kullanın :

rails new myApp --skip-active-record

Rails'in önceki sürümlerinin aksine fazladan tireye '-' dikkat edin.


1
Projenizi aktif kaydı atlamadan zaten oluşturduysanız, config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load'daki tüm active_record referanslarını yorumlayın ve database.yml dosyanızı başka bir adla yeniden adlandırın . Bu benim için yaptı.
Juan Ricardo

1
ayrıca bu satırı bin / setup => # system içinde yorumlayın! 'bin / rails db: kurulum'
Juan Ricardo

1

Bir spec/dummyuygulama içeren Rails Eklentileri (veya mücevherler) için

Ray uygulamanız içeride spec/dummykaldığında ve sunucunuzu eklenti-kök dizininden başlattığınızda. Yine de aşağıdaki hatayı alabilirsiniz:

Cannot load `Rails.application.database_configuration`: Could not load database configuration. No such file - ["config/database.yml"] 

Bunu önlemek için require rails/all, dosyanın içini kaldırın bin/railsve kullanmak istediğiniz çerçevelere ihtiyaç duyun, örneğin:

# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_cable/engine"
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "rails/test_unit/railtie"

-1

Ruby On Rails sürüm 5.1.x için

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.