Вимкнути 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для відключення activerecord?
Євген Анфілофєв

Чи потрібна програма app_middleware.delete, яка може навіть спричинити проблему?
будинок9

Для існуючих додатків рейок 4/5/6 ви можете відключити активний запис після цієї відповіді .
Альтер Лагос

Відповіді:


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 / ...
Арнаба

3
Де я можу побачити список доступних рамок рейок, необхідний замість 'рейки / всі'?
emilesilvis

18
Перелік всього, що require 'rails/all'включає, можна знайти тут .
наті

3
Я створив додаток rails new my_app -Oще місяць тому. Тепер я хочу повернути активний запис. Які файли / дорогоцінні камені / конфігурацію мені потрібно додати зараз?
Jak

1
Мені також довелося зняти config.active_record.raise_in_transactional_callbacks = trueз config/application.rb.
B Сім

15

Привіт, це те, що дає новий рейки за замовчуванням new 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


4
а для рейок 5 <= addrequire "action_cable/engine"
rails_id

7

Оскільки це все-таки перше звернення під час пошуку Google для відключення активної запису для Rails 5, я додам тут:

Для рейок 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на нове виправлене. Rerun, і ти повинен бути готовим.


4

Для відключення ActiveRecord в Rails 4.2 ви можете створити config / inicijalizers / middleware.rb

Rails.application.middleware.tap do |middleware|
  middleware.delete ActiveRecord::Migration::CheckPending
  middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
  middleware.delete ActiveRecord::QueryCache
end

Дивіться проміжне програмне забезпечення граблі терміналу


4

Для рейок 5:

Якщо ви створюєте новий додаток

Використовуйте --skip-active-recordопцію для генерації програми без бази даних:

rails new myApp --skip-active-record

Зауважте зайвий дефіс "-" на відміну від попередніх версій Rails.


1
Якщо ви вже створили свій проект, не пропускаючи активну запис, просто прокоментуйте всі посилання active_record у config / середовища / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load та перейменуйте файл database.yml у щось інше . Це зробило це для мене.
Хуан Рікардо

1
також прокоментуйте цей рядок у системі bin / setup => #! 'bin / rails db: setup'
Хуан Рікардо

1

Для плагінів (або дорогоцінних каменів Rails) з spec/dummyдодатком

Коли ваша програма Rails працює, spec/dummyі ви запускаєте свій сервер із root-каталогу каталогів. Ви все ще можете отримати таку помилку:

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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.