Disable ActiveRecord for Rails 4
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
Related videos on Youtube
Comments
-
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 over 10 yearsWhy not just use
rails new ... -O
to disable activerecord? -
house9 over 10 yearsIs the app_middleware.delete needed, might even be causing the issue?
-
Alter Lagos over 4 yearsFor existing rails 4/5/6 apps, you could disable active record following this answer.
-
-
or9ob over 9 yearsIn 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 about 9 yearsWhere can I see a list of the available Rails frameworks, to be required in lieu of 'rails/all'?
-
nates about 9 yearsThe list of everything
require 'rails/all'
includes can be found here. -
Jak about 9 yearsI 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 almost 9 yearsThis 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 over 7 yearsand for rails 5 <= add
require "action_cable/engine"
-
B Seven over 6 yearsI also had to remove
config.active_record.raise_in_transactional_callbacks = true
fromconfig/application.rb
. -
B Seven about 6 yearsWorks in Rails 5.1.4 as well.
-
Juan Ricardo about 5 yearsIn 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 about 5 yearsalso comment this line in bin/setup => # system! 'bin/rails db:setup'
-
Chris A about 4 yearsDoing this in Rails 6 I found I needed to do as in this post stackoverflow.com/a/60041361/8940624
-
x-yuri almost 4 yearsWhat are "migration check in test/test_helper.rb", might I ask?