Отключить ActiveRecord для Rails 4

Я хочу отключить ActiveRecord в Rails 4. Я сделал следующее в 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)

person アレックス    schedule 29.09.2013    source источник
comment
Почему бы просто не использовать rails new ... -O, чтобы отключить активную запись?   -  person Yevgeniy Anfilofyev    schedule 29.09.2013
comment
Нужен ли app_middleware.delete, может даже быть причиной проблемы?   -  person house9    schedule 29.09.2013
comment
Для существующих приложений rails 4/5/6 вы можете отключить активную запись после этого ответа.   -  person Alter Lagos    schedule 14.12.2019


Ответы (8)


Если вы создаете новое приложение, вы можете использовать -O, чтобы пропустить ActiveRecord:

rails new my_app -O

Для существующих приложений:

1. Удалите драгоценные камни адаптера базы данных из своего Gemfile (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. Удалите любую конфигурацию ActiveRecord из ваших config/environments файлов (это является причиной вашей ошибки)

Это все, что вам нужно сделать для пустого приложения Rails. Если вы столкнетесь с проблемами, вызванными вашим существующим кодом, трассировка стека должна предоставить вам достаточно информации о том, что вам нужно изменить. Например, у вас может быть некоторая конфигурация ActiveRecord в ваших инициализаторах.

person mechanicalfish    schedule 29.09.2013
comment
В дополнение к этим изменениям мне также пришлось удалить пару строк из spec_helpers.rb (используя RSpec): о фикстурах и транзакциях. Я также использовал active_model, поэтому заменил active_record на active_model в списке требований отсюда: stackoverflow.com/questions/19078044/ - person arnab; 22.10.2014
comment
Где я могу увидеть список доступных фреймворков Rails, которые потребуются вместо «rails / all»? - person emilesilvis; 19.02.2015
comment
Список всего, что включает require 'rails/all', можно найти здесь . - person nates; 04.03.2015
comment
Я создал приложение с rails new my_app -O месяц назад. Теперь я хочу вернуть активную запись. Какие файлы / драгоценные камни / конфигурацию мне нужно добавить сейчас? - person Jak; 25.03.2015
comment
Это действительно удобно, спасибо. Хотя я также счел полезным включить require 'active_model' в application.rb (я использую проверки из ActiveModel, но не взаимодействия с базами данных из ActiveRecord). - person AJFaraday; 03.06.2015
comment
Мне также пришлось удалить config.active_record.raise_in_transactional_callbacks = true из config/application.rb. - person B Seven; 25.08.2017
comment
Также работает в Rails 5.1.4. - person B Seven; 03.02.2018
comment
Могу я спросить, что такое проверка миграции в test / test_helper.rb? - person x-yuri; 01.05.2020

Привет, это то, что дает новый 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

person jasmo2    schedule 13.03.2016
comment
а для рельсов 5 ‹= добавить require "action_cable/engine" - person rails_id; 25.10.2016

Поскольку это все еще первое попадание при поиске в Google по отключению активной записи для Rails 5, я добавлю это здесь:

Для Rails 5

Выполните все шаги, указанные в ответе @mechanicalfish, но также удалите строку

Rails.application.config.active_record.belongs_to_required_by_default = true

из

config/initializers/new_framework_defaults.rb
person mmeyers    schedule 03.02.2017

Те, кто использует гем rails-api, могут столкнуться с аналогичной ошибкой при использовании флага --skip-active-record. при выполнении rails-api new my_api. Текущее исправление (до выпуска новой исправленной версии гема) заключается в том, чтобы отредактировать гем rails-api так, чтобы он имел этот коммит. Используйте bundle open и замените старый Gemfile новым исправленным. Повторите попытку, и все будет готово.

person Alex Moore-Niemi    schedule 29.09.2014

Для отключения ActiveRecord в Rails 4.2 вы можете создать 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

См. Терминал промежуточное ПО rake

person Vinicius Luiz    schedule 16.04.2015

Для Rails 5:

Если вы создаете новое приложение

Используйте параметр --skip-active-record для создания приложения без базы данных:

rails new myApp --skip-active-record

Обратите внимание на дополнительный дефис '-' в отличие от предыдущих версий Rails.

person Crimbo    schedule 24.03.2017
comment
Если вы уже создали свой проект, не пропуская активную запись, просто прокомментируйте все ссылки active_record в config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load И переименуйте файл database.yml во что-нибудь другое. . Это сделало это для меня. - person Juan Ricardo; 11.03.2019
comment
также прокомментируйте эту строку в bin / setup = ›# system! 'bin / rails db: setup' - person Juan Ricardo; 11.03.2019

Для подключаемых модулей (или гемов) Rails с spec/dummy приложением

Когда ваше приложение rails живет в spec/dummy и вы запускаете сервер из корневого каталога плагина. Вы все еще можете получать следующую ошибку:

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"
person rya brody    schedule 14.02.2018

Для 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"
person Kamil Załęski    schedule 21.12.2017