118

我想在 Rails 4 中禁用 ActiveRecord。我在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

8 回答 8

272

如果您正在创建一个新应用程序,您可以使用-O跳过 ActiveRecord:

rails new my_app -O

对于现有应用程序:

1. 从您的 Gemfile 中删除数据库适配器 gem(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 配置。

于 2013-09-29T13:55:40.110 回答
15

嗨,这是默认的 rails 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并且没有db/migrate/*schema.rb

于 2016-03-13T05:27:29.537 回答
7

由于这仍然是在谷歌搜索禁用 Rails 5 的活动记录时的第一个命中,我将在此处添加:

对于 Rails 5

执行@mechanicalfish 答案中的所有步骤,但也要删除该行

Rails.application.config.active_record.belongs_to_required_by_default = true

config/initializers/new_framework_defaults.rb
于 2017-02-03T23:07:45.187 回答
5

对于那些使用rails-api gem的人,--skip-active-record在执行rails-api new my_api. 当前的修复(直到发布新的更正版本的 gem)是编辑您的 rails-api gem 以进行此提交。使用并用新的更正的bundle open替换旧的。Gemfile重新运行,你应该准备好了。

于 2014-09-29T15:20:43.470 回答
4

要在 Rails 4.2 中禁用 ActiveRecord,您可以创建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

查看终端rake 中间件

于 2015-04-16T14:02:41.473 回答
4

对于 Rails 5:

如果您正在生成一个新应用程序

使用--skip-active-record选项生成没有数据库的应用程序:

rails new myApp --skip-active-record

请注意额外的连字符“-”,而不是以前的 Rails 版本。

于 2017-03-24T23:44:16.863 回答
1

对于带有spec/dummy应用程序的 Rails 插件(或 gem)

当您的 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"
于 2018-02-14T09:40:11.380 回答
-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"
于 2017-12-21T21:53:09.537 回答