禁用ActiveRecord for Rails 4

アレッ*_*ックス 110 ruby ruby-on-rails ruby-on-rails-4

我想在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
Run Code Online (Sandbox Code Playgroud)

我有一个错误

/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)
Run Code Online (Sandbox Code Playgroud)

mec*_*ish 254

如果要创建新应用程序,可以使用-O跳过ActiveRecord:

rails new my_app -O
Run Code Online (Sandbox Code Playgroud)

对于现有应用:

1.从Gemfile中删除数据库适配器gem(mysql2,sqlite3等)

2.改变你的 config/application.rb

删除require 'rails/all行并要求使用您需要的框架,例如:

require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Run Code Online (Sandbox Code Playgroud)

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配置.

  • 所有`require'trail/all'所包含的列表都可以在[这里]找到(https://github.com/rails/rails/blob/master/railties/lib/rails/all.rb). (17认同)
  • 我在哪里可以看到可用的Rails框架列表,而不是'rails/all'? (3认同)
  • 除了这些更改之外,我还必须从spec_helpers.rb中删除几行(使用RSpec):关于灯具和交易.我也使用了active_model,所以我从需要列表中将active_record替换为active_model:http://stackoverflow.com/questions/19078044/disable-activerecord-for-rails-4 (2认同)
  • 我在一个月前用`rails new my_app -O`创建了一个应用程序.现在我想要恢复活动记录.我现在需要添加什么文件/ gems /配置? (2认同)

小智 14

嗨,这是新的new_app -O默认的rails

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"
Run Code Online (Sandbox Code Playgroud)

在你的config/application.rb里面

此外,它没有database.yml和NO db/migrate/*和schema.rb

  • 并为rails 5 <=添加`require"action_cable/engine"` (4认同)

小智 6

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

对于Rails 5

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

Rails.application.config.active_record.belongs_to_required_by_default = true
Run Code Online (Sandbox Code Playgroud)

从

config/initializers/new_framework_defaults.rb
Run Code Online (Sandbox Code Playgroud)


Ale*_*emi 5

对于那些使用rails-api gem的人来说,--skip-active-record在执行时使用标志时可能会遇到类似的错误rails-api new my_api.当前修复(直到发布新的更正版本的gem)是编辑您的rails-api gem以进行此提交.使用bundle open旧Gemfile的更正旧设备并将其替换.重新运行,你应该全力以赴.