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

113

Я хочу отключить 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)
ア レ ッ ク ス
источник
4
Почему бы просто не rails new ... -Oотключить активную запись?
Евгений Анфилофьев
Нужен ли app_middleware.delete, может даже быть причиной проблемы?
house9
Для существующих приложений rails 4/5/6 вы можете отключить активную запись после этого ответа .
Alter Lagos

Ответы:

261

Если вы создаете новое приложение, вы можете использовать -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 в ваших инициализаторах.

механическая рыба
источник
2
В дополнение к этим изменениям мне также пришлось удалить пару строк из spec_helpers.rb (используя RSpec): о фикстурах и транзакциях. Я также использовал active_model, поэтому заменил active_record на active_model в списке требований отсюда: stackoverflow.com/questions/19078044/…
arnab
3
Где я могу увидеть список доступных фреймворков Rails, которые потребуются вместо «rails / all»?
emilesilvis
18
Список всего, что require 'rails/all'входит, можно найти здесь .
nates 03
3
Создал приложение с rails new my_app -Oмесяц назад. Теперь я хочу вернуть активную запись. Какие файлы / драгоценные камни / конфигурацию мне нужно добавить сейчас?
Jak
1
Мне тоже пришлось удалить config.active_record.raise_in_transactional_callbacks = trueиз config/application.rb.
B Seven,
15

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

jasmo2
источник
4
а для рельсов 5 <= addrequire "action_cable/engine"
rails_id
7

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

Для Rails 5

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

Rails.application.config.active_record.belongs_to_required_by_default = true

из

config/initializers/new_framework_defaults.rb
Ммейерс
источник
5

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

Алекс Мур-Ниеми
источник
4

Для отключения 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

См. Промежуточное ПО для граблей терминала

Винисиус Луис
источник
4

Для Rails 5:

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

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

rails new myApp --skip-active-record

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

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

Для подключаемых модулей (или гемов) 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"
Ря Броды
источник
-1

Для 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"
Камил Заленски
источник