Nonaktifkan ActiveRecord untuk Rails 4


113

Saya ingin menonaktifkan ActiveRecord di Rails 4. Saya melakukan hal berikut di 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

Oleh Saya memiliki kesalahan

/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
Mengapa tidak menggunakan saja rails new ... -Ountuk menonaktifkan activerecord?
Yevgeniy Anfilofyev

Apakah app_middleware.delete diperlukan, bahkan mungkin menyebabkan masalah?
House9

Untuk aplikasi rel 4/5/6 yang ada, Anda dapat menonaktifkan rekaman aktif mengikuti jawaban ini .
Alter Lagos

Jawaban:


261

Jika Anda membuat aplikasi baru, Anda dapat menggunakan -Ountuk melewati ActiveRecord:

rails new my_app -O

Untuk aplikasi yang sudah ada:

1. Hapus permata adaptor database dari Gemfile Anda (mysql2, sqlite3, dll.)

2. Ubah file config/application.rb

Hapus require 'rails/allbaris dan memerlukan kerangka kerja (di antara yang tersedia di railsversi Anda , daftarnya bervariasi, jangan hanya menyalin) yang ingin Anda gunakan, misalnya:

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

Hapus config.active_record.raise_in_transactional_callbacks = truedariconfig/application.rb

3. Hapus config/database.ymlfile Anda , db/schema.rbdan migrasi (jika ada)

4. Hapus check in migrasi test/test_helper.rb

5. Hapus semua konfigurasi ActiveRecord dari config/environmentsfile Anda (inilah yang menyebabkan kesalahan Anda)

Ini semua yang perlu Anda lakukan untuk aplikasi Rails kosong. Jika Anda mengalami masalah yang disebabkan oleh kode yang ada, pelacakan tumpukan akan memberi Anda informasi yang cukup tentang apa yang perlu Anda ubah. Anda mungkin misalnya memiliki beberapa konfigurasi ActiveRecord di penginisialisasi Anda.


2
Selain perubahan ini, saya juga harus menghapus beberapa baris dari spec_helpers.rb (menggunakan RSpec): tentang perlengkapan dan transaksi. Saya juga menggunakan active_model, jadi saya mengganti active_record dengan active_model di daftar persyaratan dari sini: stackoverflow.com/questions/19078044/…
arnab

3
Di mana saya dapat melihat daftar framework Rails yang tersedia, yang diperlukan sebagai pengganti 'rails / all'?
emilesilvis

18
Daftar semua yang require 'rails/all'termasuk dapat ditemukan di sini .
tanggal

3
Saya membuat aplikasi dengan rails new my_app -Osebulan yang lalu. Sekarang saya ingin rekaman aktif kembali. File / permata / konfigurasi apa yang perlu saya tambahkan sekarang?
Jak

1
Saya juga harus menghapus config.active_record.raise_in_transactional_callbacks = truedari config/application.rb.
B Tujuh

15

Hai, inilah yang diberikan rel default new_app -O

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"

di dalam config / application.rb Anda

Selain itu, ia datang tanpa database.yml dan NO db / migrate / * dan schema.rb


4
dan untuk rel 5 <= addrequire "action_cable/engine"
rails_id

7

Karena ini masih menjadi hit pertama saat mencari Google untuk menonaktifkan rekaman aktif untuk Rails 5, saya akan menambahkan ini di sini:

Untuk Rails 5

Lakukan semua langkah dalam jawaban @mechanicalfish, tetapi juga hapus garisnya

Rails.application.config.active_record.belongs_to_required_by_default = true

dari

config/initializers/new_framework_defaults.rb

5

Bagi mereka yang menggunakan gem rails-api, Anda mungkin mengalami kesalahan serupa saat menggunakan --skip-active-recordflag saat melakukannya rails-api new my_api. Perbaikan saat ini (sampai versi baru yang dikoreksi dari permata tersebut dirilis) adalah dengan mengedit permata rails-api Anda agar komit ini . Gunakan bundle opendan ganti yang lama Gemfiledengan yang baru diperbaiki. Jalankan kembali dan Anda harus siap.


4

Untuk menonaktifkan ActiveRecord di Rails 4.2 Anda dapat membuat config / initializers / middleware.rb

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

Lihat middleware rake terminal


4

Untuk Rails 5:

Jika Anda membuat aplikasi baru

Gunakan --skip-active-recordopsi untuk menghasilkan aplikasi tanpa database:

rails new myApp --skip-active-record

Perhatikan tanda hubung tambahan '-' sebagai lawan dari versi Rails sebelumnya.


1
Jika Anda telah membuat proyek Anda tanpa melewatkan catatan aktif, Cukup komentari semua referensi active_record di config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load Dan ganti nama file database.yml Anda ke yang lain . Itu berhasil untuk saya.
Juan Ricardo

1
juga komentari baris ini di bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo

1

Untuk Rails Plugins (atau permata) dengan spec/dummyaplikasi

Saat aplikasi rails Anda aktif spec/dummydan Anda memulai server dari direktori plugin-root. Anda mungkin masih mendapatkan kesalahan berikut:

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

Untuk menghindarinya, hapus require rails/alldi dalam file bin/railsdan membutuhkan kerangka kerja yang ingin Anda gunakan, misalnya:

# 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

Untuk Ruby On Rails versi 5.1.x

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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.