Disable ActiveRecord for Rails 4

51,958

Solution 1

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

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

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

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

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

Share:
51,958

Related videos on Youtube

Incerteza
Author by

Incerteza

Alex is here: https://gildedhonour.co

Updated on May 01, 2020

Comments

  • Incerteza
    Incerteza almost 4 years

    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)
    
    • Yevgeniy Anfilofyev
      Yevgeniy Anfilofyev over 10 years
      Why not just use rails new ... -O to disable activerecord?
    • house9
      house9 over 10 years
      Is the app_middleware.delete needed, might even be causing the issue?
    • Alter Lagos
      Alter Lagos over 4 years
      For existing rails 4/5/6 apps, you could disable active record following this answer.
  • or9ob
    or9ob over 9 years
    In addition to these changes, I also had to remove a couple of lines from spec_helpers.rb (using RSpec): about fixtures and transactions. I was also using active_model, so I replaced active_record with active_model in the requires list from here: stackoverflow.com/questions/19078044/…
  • emilesilvis
    emilesilvis about 9 years
    Where can I see a list of the available Rails frameworks, to be required in lieu of 'rails/all'?
  • nates
    nates about 9 years
    The list of everything require 'rails/all' includes can be found here.
  • Jak
    Jak about 9 years
    I created an application with rails new my_app -O a month ago. Now I want the active record back. What are files/gems/configuration I need to add now?
  • AJFaraday
    AJFaraday almost 9 years
    This is really handy, thanks. Although I also found it helpful to include require 'active_model' in application.rb (I'm using the validations from ActiveModel, but not the db interactions from ActiveRecord).
  • rails_id
    rails_id over 7 years
    and for rails 5 <= add require "action_cable/engine"
  • B Seven
    B Seven over 6 years
    I also had to remove config.active_record.raise_in_transactional_callbacks = true from config/application.rb.
  • B Seven
    B Seven about 6 years
    Works in Rails 5.1.4 as well.
  • Juan Ricardo
    Juan Ricardo about 5 years
    In case you have already created your project without skipping active record, Just comment all active_record references in config/environments/ # config.active_record.verbose_query_logs = true # config.active_record.migration_error = :page_load And rename your database.yml file to something else. That did it for me.
  • Juan Ricardo
    Juan Ricardo about 5 years
    also comment this line in bin/setup => # system! 'bin/rails db:setup'
  • Chris A
    Chris A about 4 years
    Doing this in Rails 6 I found I needed to do as in this post stackoverflow.com/a/60041361/8940624
  • x-yuri
    x-yuri almost 4 years
    What are "migration check in test/test_helper.rb", might I ask?