Wyłącz ActiveRecord dla Rails 4

113

Chcę wyłączyć ActiveRecord w Railsach 4. Wykonałem następujące czynności 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

Przez mam błąd

/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)
ア レ ッ ク ス
źródło
4
Dlaczego po prostu nie użyć, rails new ... -Oaby wyłączyć activerecord?
Yevgeniy Anfilofyev
Czy plik app_middleware.delete jest potrzebny, a może nawet powoduje problem?
house 9
W przypadku istniejących aplikacji rails 4/5/6 można wyłączyć aktywny rekord po tej odpowiedzi .
Alter Lagos

Odpowiedzi:

261

Jeśli tworzysz nową aplikację, możesz użyć -Odo pominięcia ActiveRecord:

rails new my_app -O

W przypadku istniejących aplikacji:

1. Usuń klejnoty adapterów bazy danych z pliku Gemfile (mysql2, sqlite3 itp.)

2. Zmień swoje config/application.rb

Usuń require 'rails/alllinię i wymagaj frameworków (spośród tych dostępnych w twojej railswersji lista jest różna, nie tylko kopiuj), których chcesz użyć, na przykład:

require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"

Usuń config.active_record.raise_in_transactional_callbacks = truezconfig/application.rb

3. Usuń config/database.ymlplik db/schema.rbi migracje (jeśli istnieją)

4. Usuń rejestrację migracji test/test_helper.rb

5. Usuń konfigurację ActiveRecord z config/environmentsplików (to jest przyczyną błędu)

To wszystko, co musisz zrobić dla pustej aplikacji Rails. Jeśli napotkasz problemy spowodowane przez istniejący kod, śledzenie stosu powinno dostarczyć wystarczających informacji o tym, co należy zmienić. Możesz na przykład mieć konfigurację ActiveRecord w swoich inicjatorach.

mechaniczna ryba
źródło
2
Oprócz tych zmian musiałem również usunąć kilka wierszy z spec_helpers.rb (używając RSpec): o urządzeniach i transakcjach. Używałem również active_model, więc zastąpiłem active_record active_model na liście
wymagań
3
Gdzie mogę zobaczyć listę dostępnych frameworków Railsów, które mają być wymagane zamiast 'rails / all'?
emilesilvis
18
Listę wszystkiego, co require 'rails/all'zawiera, można znaleźć tutaj .
nates
3
Stworzyłem aplikację z rails new my_app -Omiesiąc temu. Teraz chcę odzyskać aktywny rekord. Jakie pliki / klejnoty / konfiguracje muszę teraz dodać?
Jak
1
Musiałem też usunąć config.active_record.raise_in_transactional_callbacks = truez config/application.rb.
B Seven
15

Cześć, to właśnie daje domyślne railsy 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"

wewnątrz pliku config / application.rb

Dodatkowo jest dostarczany bez database.yml i NO db / migrate / * i schema.rb

jasmo2
źródło
4
i dla szyn 5 <= addrequire "action_cable/engine"
rails_id
7

Ponieważ jest to wciąż pierwszy hit podczas wyszukiwania Google w celu wyłączenia aktywnego rekordu dla Rails 5, dodam to tutaj:

Do szyn 5

Wykonaj wszystkie kroki w odpowiedzi @mechanicalfish, ale także usuń linię

Rails.application.config.active_record.belongs_to_required_by_default = true

z

config/initializers/new_framework_defaults.rb
mmeyers
źródło
5

Dla tych, którzy używają rails-api gem , możesz napotkać podobny błąd podczas używania --skip-active-recordflagi rails-api new my_api. Bieżąca poprawka (do czasu wydania nowej poprawionej wersji klejnotu) polega na edycji gemu rails-api tak, aby miał to zatwierdzenie . Użyj bundle openi wymień stary Gemfilena nowy, poprawiony. Uruchom ponownie i wszystko powinno być gotowe.

Alex Moore-Niemi
źródło
4

Aby wyłączyć ActiveRecord w Railsach 4.2, możesz utworzyć 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

Zobacz oprogramowanie pośredniczące do rake terminali

Vinicius Luiz
źródło
4

Dla szyn 5:

Jeśli generujesz nową aplikację

Skorzystaj z --skip-active-recordopcji generowania aplikacji bez bazy danych:

rails new myApp --skip-active-record

Zwróć uwagę na dodatkowy myślnik „-” w przeciwieństwie do poprzednich wersji Railsów.

Crimbo
źródło
1
Jeśli już stworzyłeś swój projekt bez pomijania aktywnego rekordu, po prostu skomentuj wszystkie odniesienia active_record w config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load I zmień nazwę pliku database.yml na inną . To zrobiło to dla mnie.
Juan Ricardo
1
skomentuj również tę linię w bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo
1

Dla wtyczek Rails (lub klejnotów) z spec/dummyaplikacją

Kiedy twoja aplikacja rails żyje spec/dummyi uruchamiasz serwer z katalogu głównego wtyczki. Nadal możesz otrzymywać następujący błąd:

Cannot load `Rails.application.database_configuration`: Could not load database configuration. No such file - ["config/database.yml"] 

Aby tego uniknąć, usuń require rails/allzawartość pliku bin/railsi wymagaj frameworków, których chcesz użyć, na przykład:

# 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"
rya brody
źródło
-1

Dla Ruby On Rails w wersji 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"
Kamil Załęski
źródło