禁用ActiveRecord for Rails 4


113

我想在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
为什么不只是rails new ... -O用来禁用activerecord?
Yevgeniy Anfilofyev

是否需要app_middleware.delete甚至可能导致此问题?
13年

对于现有的Rails 4/5/6应用程序,您可以按照此答案禁用活动记录。
Alter Lagos

Answers:


261

如果要创建新的应用程序,则可以-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.从config/environments文件中删除任何ActiveRecord配置(这是导致您出错的原因)

这是您为空的Rails应用程序所需要做的全部工作。如果遇到由现有代码引起的问题,堆栈跟踪应为您提供有关需要更改的足够信息。例如,您可能在初始化程序中有一些ActiveRecord配置。


2
除了这些更改之外,我还必须从spec_helpers.rb(使用RSpec)中删除几行:关于固定和交易。我还使用active_model,所以我换成active_record与在active_model要求列表从这里:stackoverflow.com/questions/19078044/...
ARNAB

3
在哪里可以看到可用的Rails框架列表来代替“ rails / all”?
emilesilvis 2015年

18
所有require 'rails/all'内容的列表都可以在这里找到。
纳茨

3
我在rails new my_app -O一个月前创建了一个应用程序。现在,我要恢复活动记录。我现在需要添加什么文件/宝石/配置?
2015年

1
我也不得不删除config.active_record.raise_in_transactional_callbacks = trueconfig/application.rb
B

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,也没有db / migrate / *schema.rb


4
对于rails 5 <= addrequire "action_cable/engine"
rails_id 16-10-25

7

由于这仍然是搜索Google禁用Rails 5的活动记录时的第一击,因此,请在此处添加以下内容:

对于Rails 5

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

Rails.application.config.active_record.belongs_to_required_by_default = true

config/initializers/new_framework_defaults.rb

5

对于使用rails-api gem的用户,--skip-active-record在做时使用标志可能会遇到类似的错误rails-api new my_api。当前的修复(直到发布了新的更正版本的gem)是编辑您的rails-api gem进行此提交。使用bundle open旧的Gemfile,并用新的校正后的旧的替换。重新运行,您应该准备就绪。


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

查看终端耙中间件


4

对于Rails 5:

如果您要生成一个新的应用程序

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

rails new myApp --skip-active-record

请注意,与以前版本的Rails相比,多余的连字符“-”。


1
如果您已经创建了项目而没有跳过活动记录,则只需在config / environments /中注释所有active_record引用即可。 。对我来说就做到了。
Juan Ricardo

1
还可以在bin / setup =>#system中注释此行!“斌/导轨DB:设置”
胡安·里卡多·

1

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

当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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.