Disable ActiveRecord for Rails 4

Ruby on-RailsRubyRuby on-Rails-4

Ruby on-Rails Problem Overview


I want to disable ActiveRecord in Rails 4. I did the following in 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

By I have an error of

/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)

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

If you are creating a new application, you can use -O to skip ActiveRecord:

rails new my_app -O

For existing applications:

1. Remove database adapter gems from your Gemfile (mysql2, sqlite3, etc.)

2. Change your config/application.rb

Remove require 'rails/all line and require frameworks (among those available in your rails version, the list varies, do not just copy) you want to use, for example:

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

Remove config.active_record.raise_in_transactional_callbacks = true from config/application.rb

3. Delete your config/database.yml file, db/schema.rb and migrations (if any)

4. Delete migration check in test/test_helper.rb

5. Delete any ActiveRecord configuration from your config/environments files (this is what is causing your error)

This is all you need to do for an empty Rails app. If you run into problems caused by your existing code, stack trace should give you sufficient information on what you need to change. You might for example have some ActiveRecord configuration in your initializers.

Solution 2 - Ruby on-Rails

Hi this is what the default rails new new_app -O gives

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"

inside your config/application.rb

Additionally, it comes without database.yml and NO db/migrate/* and schema.rb

Solution 3 - Ruby on-Rails

Since this is still the first hit when searching Google for disabling active record for Rails 5, I'll add this here:

For Rails 5

Do all the steps in @mechanicalfish answer, but also remove the line

Rails.application.config.active_record.belongs_to_required_by_default = true

from

config/initializers/new_framework_defaults.rb

Solution 4 - Ruby on-Rails

For those using the rails-api gem you may encounter a similar error when using the --skip-active-record flag when doing rails-api new my_api. The current fix (until a new corrected version of the gem is released) is to edit your rails-api gem to have this commit. Use bundle open and replace the old Gemfile with the new corrected one. Rerun and you should be all set.

Solution 5 - Ruby on-Rails

For disable ActiveRecord in Rails 4.2 you may create 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

See the terminal rake middleware

Solution 6 - Ruby on-Rails

For Rails 5:

If you are generating a new app

Use --skip-active-record option to generate an application without a database:

rails new myApp --skip-active-record

> Notice the extra hyphen '-' as opposed to previous versions of Rails.

Solution 7 - Ruby on-Rails

For Rails Plugins (or gems) with a spec/dummy app

When your rails app lives in spec/dummy and you start your server from the plugin-root directory. You might still getting following error:

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

To avoid this, remove require rails/all inside the file bin/rails and require frameworks you want to use, for example:

# 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"


Solution 8 - Ruby on-Rails

For Ruby On Rails version 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"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIncertezaView Question on Stackoverflow
Solution 1 - Ruby on-RailsmechanicalfishView Answer on Stackoverflow
Solution 2 - Ruby on-Railsjasmo2View Answer on Stackoverflow
Solution 3 - Ruby on-RailsmmeyersView Answer on Stackoverflow
Solution 4 - Ruby on-RailsAlex Moore-NiemiView Answer on Stackoverflow
Solution 5 - Ruby on-RailsVinicius LuizView Answer on Stackoverflow
Solution 6 - Ruby on-RailsCrimboView Answer on Stackoverflow
Solution 7 - Ruby on-Railsrya brodyView Answer on Stackoverflow
Solution 8 - Ruby on-RailsKamil ZałęskiView Answer on Stackoverflow