Disabilita ActiveRecord per Rails 4


113

Voglio disabilitare ActiveRecord in Rails 4. Ho fatto quanto segue 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

Da ho un errore di

/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
Perché non utilizzare solo rails new ... -Oper disabilitare activerecord?
Yevgeniy Anfilofyev

È necessario app_middleware.delete, potrebbe anche essere la causa del problema?
house9

Per le app rails 4/5/6 esistenti, puoi disabilitare il record attivo seguendo questa risposta .
Alter Lagos

Risposte:


261

Se stai creando una nuova applicazione, puoi usare -Oper saltare ActiveRecord:

rails new my_app -O

Per applicazioni esistenti:

1. Rimuovi le gemme dell'adattatore del database dal tuo Gemfile (mysql2, sqlite3, ecc.)

2. Cambia il tuo config/application.rb

Rimuovi require 'rails/allriga e richiedi i framework (tra quelli disponibili nella tua railsversione, l'elenco varia, non limitarti a copiare) che vuoi utilizzare, ad esempio:

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

Rimuovi config.active_record.raise_in_transactional_callbacks = truedaconfig/application.rb

3. Elimina il tuo config/database.ymlfile db/schema.rbe le migrazioni (se presenti)

4. Elimina il check-in della migrazione test/test_helper.rb

5. Elimina qualsiasi configurazione di ActiveRecord dai tuoi config/environmentsfile (questo è ciò che causa il tuo errore)

Questo è tutto ciò che devi fare per un'app Rails vuota. Se si verificano problemi causati dal codice esistente, lo stack trace dovrebbe fornire informazioni sufficienti su ciò che è necessario modificare. Ad esempio, potresti avere una configurazione ActiveRecord nei tuoi inizializzatori.


2
Oltre a queste modifiche, ho anche dovuto rimuovere un paio di righe da spec_helpers.rb (usando RSpec): su fixtures e transazioni. Stavo anche usando active_model, quindi ho sostituito active_record con active_model nell'elenco dei requisiti da qui: stackoverflow.com/questions/19078044/…
arnab

3
Dove posso vedere un elenco dei framework Rails disponibili, da richiedere al posto di 'rails / all'?
emilesilvis

18
L'elenco di tutto ciò che require 'rails/all'include può essere trovato qui .
Nates

3
Ho creato un'applicazione con rails new my_app -Oun mese fa. Ora voglio indietro il record attivo. Cosa sono i file / gems / configurazioni che devo aggiungere ora?
Jak

1
Ho anche dovuto rimuovere config.active_record.raise_in_transactional_callbacks = trueda config/application.rb.
B Seven

15

Ciao, questo è ciò che dà il default rails 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"

all'interno del tuo config / application.rb

Inoltre, viene fornito senza database.yml e NO db / migrate / * e schema.rb


4
e per rails 5 <= addrequire "action_cable/engine"
rails_id

7

Poiché questo è ancora il primo risultato durante la ricerca su Google per disabilitare il record attivo per Rails 5, lo aggiungerò qui:

Per binari 5

Esegui tutti i passaggi in @mechanicalfish answer, ma rimuovi anche la linea

Rails.application.config.active_record.belongs_to_required_by_default = true

a partire dal

config/initializers/new_framework_defaults.rb

5

Per coloro che utilizzano la gemma rails-api, potresti riscontrare un errore simile quando usi la --skip-active-recordbandiera durante l'esecuzione rails-api new my_api. La correzione corrente (fino al rilascio di una nuova versione corretta della gemma) consiste nel modificare la gemma rails-api per avere questo commit . Usa bundle opene sostituisci il vecchio Gemfilecon il nuovo corretto. Riesegui e dovresti essere pronto.


4

Per disabilitare ActiveRecord in Rails 4.2 puoi creare 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

Vedi il middleware del rake del terminale


4

Per Rails 5:

Se stai generando una nuova app

Usa l' --skip-active-recordopzione per generare un'applicazione senza un database:

rails new myApp --skip-active-record

Notare il trattino aggiuntivo '-' rispetto alle versioni precedenti di Rails.


1
Nel caso in cui tu abbia già creato il tuo progetto senza saltare il record attivo, commenta semplicemente tutti i riferimenti active_record in config / ambienti / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load E rinomina il tuo file database.yml in qualcos'altro . Che ha fatto per me.
Juan Ricardo

1
commenta anche questa riga in bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo

1

Per Rails Plugins (o gems) con spec/dummyun'app

Quando la tua app rails risiede spec/dummye avvii il tuo server dalla directory plugin-root. Potresti ancora ricevere il seguente errore:

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

Per evitare ciò, rimuovi l' require rails/allinterno del file bin/railse richiedi i framework che desideri utilizzare, ad esempio:

# 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

Per Ruby On Rails versione 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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.