Tắt ActiveRecord cho Rails 4


113

Tôi muốn tắt ActiveRecord trong Rails 4. Tôi đã làm như sau trong 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

Bởi tôi có một lỗi của

/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
Tại sao không chỉ sử dụng rails new ... -Ođể tắt activerecord?
Yevgeniy Anfilofyev 29/09/13

Có cần app_middleware.delete không, thậm chí có thể gây ra sự cố?
house9 29/09/13

Đối với các ứng dụng rails 4/5/6, bạn có thể tắt tính năng ghi hoạt động theo câu trả lời này .
Alter Lagos

Câu trả lời:


261

Nếu bạn đang tạo một ứng dụng mới, bạn có thể sử dụng -Ođể bỏ qua ActiveRecord:

rails new my_app -O

Đối với các ứng dụng hiện có:

1. Xóa đá quý bộ điều hợp cơ sở dữ liệu khỏi Gemfile của bạn (mysql2, sqlite3, v.v.)

2. Thay đổi config/application.rb

Loại bỏ require 'rails/alldòng và khuôn khổ yêu cầu (trong số những khuôn khổ có sẵn trong railsphiên bản của bạn , danh sách khác nhau, không chỉ sao chép) mà bạn muốn sử dụng, ví dụ:

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

Xóa config.active_record.raise_in_transactional_callbacks = truekhỏiconfig/application.rb

3. Xóa config/database.ymltệp của bạn db/schema.rbvà di chuyển (nếu có)

4. Xóa đăng ký di chuyển test/test_helper.rb

5. Xóa bất kỳ cấu hình ActiveRecord nào khỏi config/environmentstệp của bạn (đây là nguyên nhân gây ra lỗi của bạn)

Đây là tất cả những gì bạn cần làm đối với một ứng dụng Rails trống. Nếu bạn gặp sự cố do mã hiện có của mình, theo dõi ngăn xếp sẽ cung cấp cho bạn đầy đủ thông tin về những gì bạn cần thay đổi. Ví dụ, bạn có thể có một số cấu hình ActiveRecord trong bộ khởi tạo của mình.


2
Ngoài những thay đổi này, tôi cũng phải xóa một vài dòng khỏi spec_helpers.rb (sử dụng RSpec): về đồ đạc và giao dịch. Tôi cũng đang sử dụng active_model, vì vậy tôi đã thay thế active_record bằng active_model trong danh sách yêu cầu từ đây: stackoverflow.com/questions/19078044/…
arnab

3
Tôi có thể xem danh sách các khung công tác Rails có sẵn ở đâu, được yêu cầu thay cho 'rails / all'?
emilesilvis

18
Danh sách tất cả mọi thứ require 'rails/all'bao gồm có thể được tìm thấy ở đây .
nates ngày

3
Tôi đã tạo một ứng dụng với rails new my_app -Omột tháng trước. Bây giờ tôi muốn bản ghi hoạt động trở lại. Tôi cần thêm tệp / đá quý / cấu hình nào bây giờ?
Jak

1
Tôi cũng đã phải xóa config.active_record.raise_in_transactional_callbacks = truekhỏi config/application.rb.
B Bảy

15

Xin chào, đây là những gì mà new_app -O rails mặc định

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"

bên trong config / application.rb của bạn

Ngoài ra, nó không có database.yml và KHÔNG có db / migrate / *schema.rb


4
và cho đường ray 5 <= addrequire "action_cable/engine"
rails_id

7

Vì đây vẫn là lần truy cập đầu tiên khi tìm kiếm trên Google để vô hiệu hóa bản ghi đang hoạt động cho Rails 5, tôi sẽ thêm điều này vào đây:

Đối với đường ray 5

Thực hiện tất cả các bước trong câu trả lời @mechanicalfish nhưng cũng xóa dòng

Rails.application.config.active_record.belongs_to_required_by_default = true

từ

config/initializers/new_framework_defaults.rb

5

Đối với những người sử dụng gem rails-api, bạn có thể gặp phải lỗi tương tự khi sử dụng --skip-active-recordcờ khi thực hiện rails-api new my_api. Bản sửa lỗi hiện tại (cho đến khi một phiên bản sửa chữa mới của viên ngọc được phát hành) là chỉnh sửa viên ngọc rails-api của bạn để có được cam kết này . Sử dụng bundle openvà thay thế cái cũ Gemfilebằng cái mới đã sửa chữa. Chạy lại và bạn sẽ hoàn tất.


4

Để vô hiệu hóa ActiveRecord trong Rails 4.2, bạn có thể tạo config / khởi tạo / middleware.rb

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

Xem phần mềm trung gian cào đầu cuối


4

Đối với Rails 5:

Nếu bạn đang tạo một ứng dụng mới

Sử dụng --skip-active-recordtùy chọn để tạo ứng dụng không có cơ sở dữ liệu:

rails new myApp --skip-active-record

Lưu ý thêm dấu gạch nối '-' trái ngược với các phiên bản trước của Rails.


1
Trong trường hợp bạn đã tạo dự án của mình mà không bỏ qua bản ghi hiện hoạt, chỉ cần nhận xét tất cả các tham chiếu active_record trong config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load Và đổi tên tệp database.yml của bạn thành một thứ khác . Điều đó đã làm nó cho tôi.
Juan Ricardo

1
cũng bình luận dòng này trong bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo

1

Đối với Plugin Rails (hoặc đá quý) với một spec/dummyứng dụng

Khi ứng dụng rails của bạn hoạt động spec/dummyvà bạn khởi động máy chủ của mình từ thư mục gốc của plugin. Bạn vẫn có thể gặp lỗi sau:

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

Để tránh điều này, hãy xóa require rails/allbên trong tệp bin/railsvà yêu cầu các khuôn khổ bạn muốn sử dụng, ví dụ:

# 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

Đối với phiên bản 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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.