ปิดใช้งาน ActiveRecord สำหรับ Rails 4


113

ฉันต้องการปิดใช้งาน ActiveRecord ใน Rails 4 ฉันทำสิ่งต่อไปนี้ใน 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

โดยฉันมีข้อผิดพลาดของ

/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
ทำไมไม่ใช้rails new ... -Oเพื่อปิดการใช้งาน activerecord?
Yevgeniy Anfilofyev

จำเป็นต้องใช้ app_middleware.delete หรือไม่อาจทำให้เกิดปัญหาได้หรือไม่
บ้าน 9

สำหรับแอพ Rails 4/5/6 ที่มีอยู่คุณสามารถปิดใช้งานบันทึกที่ใช้งานได้ตามคำตอบนี้
Alter Lagos

คำตอบ:


261

หากคุณกำลังสร้างแอปพลิเคชันใหม่คุณสามารถใช้-Oเพื่อข้าม ActiveRecord:

rails new my_app -O

สำหรับแอปพลิเคชันที่มีอยู่:

1. ลบอัญมณีอะแดปเตอร์ฐานข้อมูลออกจาก Gemfile ของคุณ (mysql2, sqlite3 ฯลฯ )

2. เปลี่ยนไฟล์ config/application.rb

ลบrequire 'rails/allบรรทัดและต้องการเฟรมเวิร์ก (ในบรรดาที่มีอยู่ในrailsเวอร์ชันของคุณรายการจะแตกต่างกันไปอย่าเพิ่งคัดลอก) ที่คุณต้องการใช้ตัวอย่างเช่น:

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

ลบออกconfig.active_record.raise_in_transactional_callbacks = trueจากconfig/application.rb

3. ลบconfig/database.ymlไฟล์ของคุณdb/schema.rbและการย้ายข้อมูล (ถ้ามี)

4. ลบการย้ายข้อมูลเช็คอิน test/test_helper.rb

5. ลบการกำหนดค่า ActiveRecord ออกจากconfig/environmentsไฟล์ของคุณ(นี่คือสิ่งที่ทำให้เกิดข้อผิดพลาดของคุณ)

นี่คือสิ่งที่คุณต้องทำสำหรับแอพ Rails ที่ว่างเปล่า หากคุณพบปัญหาที่เกิดจากโค้ดที่มีอยู่การติดตามสแต็กควรให้ข้อมูลที่เพียงพอเกี่ยวกับสิ่งที่คุณต้องเปลี่ยนแปลง ตัวอย่างเช่นคุณอาจมีการกำหนดค่า ActiveRecord ในตัวเริ่มต้นของคุณ


2
นอกเหนือจากการเปลี่ยนแปลงเหล่านี้ฉันยังต้องลบสองสามบรรทัดออกจาก spec_helpers.rb (โดยใช้ RSpec): เกี่ยวกับการแข่งขันและธุรกรรม ฉันใช้ active_model ด้วยดังนั้นฉันจึงแทนที่ active_record ด้วย active_model ในรายการที่ต้องการจากที่นี่: stackoverflow.com/questions/19078044/…
arnab

3
ฉันจะดูรายการเฟรมเวิร์ก Rails ที่มีอยู่ได้ที่ไหนซึ่งจะต้องใช้แทน 'ราง / ทั้งหมด'
emilesilvis

18
รายชื่อของทุกอย่างrequire 'rails/all'รวมถึงสามารถพบได้ที่นี่
Nates

3
ฉันสร้างแอปพลิเคชันrails new my_app -Oเมื่อเดือนที่แล้ว ตอนนี้ฉันต้องการบันทึกที่ใช้งานอยู่กลับมา ไฟล์ / อัญมณี / คอนฟิกูเรชันที่ฉันต้องเพิ่มตอนนี้คืออะไร?
จักร

1
ฉันยังต้องลบออกconfig.active_record.raise_in_transactional_callbacks = trueจากconfig/application.rb.
B Seven

15

สวัสดีนี่คือสิ่งที่รางเริ่มต้น 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"

ภายในconfig / application.rbของคุณ

นอกจากนี้ยังมาโดยไม่มีdatabase.ymlและ NO db / migrate / *และschema.rb


4
และสำหรับราง 5 <= เพิ่มrequire "action_cable/engine"
rail_id

7

เนื่องจากนี่ยังคงเป็น Hit แรกเมื่อค้นหา Google เพื่อปิดใช้งานบันทึกการใช้งานสำหรับ Rails 5 ฉันจะเพิ่มสิ่งนี้ที่นี่:

สำหรับ Rails 5

ทำทุกขั้นตอนในคำตอบของ @mechanicalfish แต่ลบบรรทัดด้วย

Rails.application.config.active_record.belongs_to_required_by_default = true

จาก

config/initializers/new_framework_defaults.rb

5

สำหรับผู้ใช้อัญมณีราง-APIคุณอาจพบข้อผิดพลาดที่คล้ายกันเมื่อใช้ธงเมื่อทำ--skip-active-record rails-api new my_apiการแก้ไขปัจจุบัน (จนกว่าจะมีการเปิดตัวอัญมณีเวอร์ชันแก้ไขใหม่) คือการแก้ไขเรล - เอพิเจมของคุณให้มีการคอมมิตนี้ ใช้bundle openและแทนที่เก่าGemfileด้วยใหม่ที่ได้รับการแก้ไข รีรันและคุณควรจะพร้อม


4

สำหรับการปิดใช้งาน ActiveRecord ใน Rails 4.2 คุณสามารถสร้าง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

ดูมิดเดิลแวร์คราดเทอร์มินั


4

สำหรับ Rails 5:

หากคุณกำลังสร้างแอปใหม่

ใช้--skip-active-recordตัวเลือกเพื่อสร้างแอปพลิเคชันโดยไม่มีฐานข้อมูล:

rails new myApp --skip-active-record

สังเกตยัติภังค์พิเศษ "-" ซึ่งตรงข้ามกับ Rails เวอร์ชันก่อนหน้า


1
ในกรณีที่คุณได้สร้างโปรเจ็กต์ของคุณแล้วโดยไม่ได้ข้ามบันทึกที่ใช้งานอยู่เพียงแค่แสดงความคิดเห็นการอ้างอิง active_record ทั้งหมดใน config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load และเปลี่ยนชื่อไฟล์ database.yml ของคุณเป็นอย่างอื่น . ที่ทำเพื่อฉัน
Juan Ricardo

1
ยังแสดงความคิดเห็นในบรรทัดนี้ใน bin / setup => # ระบบ! 'bin / rail db: setup'
Juan Ricardo

1

สำหรับ Rails Plugins (หรืออัญมณี) ด้วยspec/dummyแอพ

เมื่อแอพ Rails ของคุณอยู่ในspec/dummyและคุณเริ่มเซิร์ฟเวอร์จากไดเร็กทอรี plugin-root คุณอาจยังคงได้รับข้อผิดพลาดต่อไปนี้:

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

เพื่อหลีกเลี่ยงปัญหานี้ให้ลบrequire rails/allภายในไฟล์bin/railsและต้องการเฟรมเวิร์กที่คุณต้องการใช้ตัวอย่างเช่น:

# 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 เวอร์ชัน 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"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.