Rimuovere ActiveRecord in Rails 3
-
19-09-2019 - |
Domanda
Ora che Rails 3 beta è fuori, ho pensato di dare un'occhiata a riscrivere un app che ho appena iniziato a lavorare su in Rails 3 beta, sia per ottenere una sensazione di esso e ottenere un po 'di una testa-start . L'applicazione utilizza MongoDB e MongoMapper per tutti i suoi modelli e quindi non ha bisogno di ActiveRecord. Nella versione precedente, sto scaricando ActiveRecord nel seguente modo:
config.frameworks -= [ :active_record ] # inside environment.rb
Nella versione più recente questo non funziona - è solo genera un errore:
/Library/Ruby/Gems/1.8/gems/railties-3.0.0.beta/lib/rails/configuration.rb:126:in
`frameworks': config.frameworks in no longer supported. See the generated
config/boot.rb for steps on how to limit the frameworks that will be loaded
(RuntimeError)
from *snip*
Naturalmente, ho guardato il boot.rb come suggerito, ma per quanto posso vedere, non v'è alcun indizio qui di come potrei fare per lo scarico AR. La ragione per cui ho bisogno di fare questo è perché non solo è stupido da caricando qualcosa che io non voglio, ma si lamenta la sua incapacità di effettuare una connessione DB anche quando provo a fare funzionare un generatore per un controller. Questo perché ho spazzato via database.yml
e lo ha sostituito con i dettagli di connessione per MongoDB al fine di utilizzare questo succo utilizzando database.yml per MongoDB dettagli della connessione. Non certo perché ha bisogno di essere in grado di avviare una connessione DB a tutti solo per generare un controller in ogni caso ....
C'è qualcuno a conoscenza dei corretti Rails 3 modo di fare questo?
Soluzione
Io vado da questo dalla lettura della fonte, quindi fatemi sapere se effettivamente lavorate. :)
Il comando rails
che genera il modello di applicazione ha ora un -O
opzione, che gli dice di saltare ActiveRecord.
Se non avete voglia di eseguire nuovamente rails
, si dovrebbe verificare il seguente nella vostra applicazione esistente:
-
Verificare che il
config/application.rb
non hannorequire 'rails/all'
orequire "active_record/railtie"
. Invece, per una configurazione standard Rails senza ActiveRecord, dovrebbe avere solo il seguente richiede:require File.expand_path('../boot', __FILE__) require "action_controller/railtie" require "action_mailer/railtie" require "active_resource/railtie" require "rails/test_unit/railtie" require "sprockets/railtie" # Auto-require default libraries and those for the current Rails environment. Bundler.require :default, Rails.env
-
Se, in
config/application.rb
, si sta utilizzando la sezioneconfig.generators
, assicurarsi che non ha la linea dig.orm :active_record
. È possibile impostare esplicitamente anil
, se si vuole, ma questo dovrebbe essere l'impostazione predefinita quandog.orm
mancano totalmente. -
Opzionale, ma nel tuo
Gemfile
, rimuovere la rigagem
che carica il modulo per il database. Questa potrebbe essere la linea digem "mysql"
per esempio.
Altri suggerimenti
Rails 4
Ero alla ricerca di come disabilitare in binari 4 e ho trovato solo questa risposta, che non funziona più in rotaie 4. Quindi questo è come si può fare a rotaie 4 (testato in RC1).
In un nuovo progetto
rails new YourProject --skip-active-record
In un progetto esistente
- Nella tua Gemfile, rimuovere il driver gemma di database, ad esempio,
gem 'sqlite3'
ogem 'pg'
. -
In config / application.rb, sostituire
require 'rails/all'
conrequire "action_controller/railtie" require "action_mailer/railtie" require "sprockets/railtie" require "rails/test_unit/railtie"
-
In config / ambienti / development.rb, rimuovere o commentare
config.active_record.migration_error = :page_load
-
Potenzialmente è necessario rimuovere aiutanti active_record dal spec_helper (tramite VenoM nei commenti)
-
Potenzialmente è necessario rimuovere il middleware connectionManagement (sembra essere il caso con unicorno):
config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
(via https: / /stackoverflow.com/a/18087332/764342 )
Spero che questo aiuta gli altri alla ricerca di come disattivare ActiveRecord in Rails 4.
Per una nuova applicazione Rails, si può avere lo esclude record attivo specificando il parametro --skip-active-record. Ad esempio:
rails new appname --skip-active-record
Se si è generato un nuovo progetto utilizzando Rails 3.2, sarà anche bisogno di commentare:
config.active_record.mass_assignment_sanitizer = :strict
e
config.active_record.auto_explain_threshold_in_seconds = 0.5
nel file development.rb .
Tutte le precedenti sono vere. L'unica cosa che ho avuto a che fare in Rails 3.1 è quella di commentare
config.active_record.identity_map = true
in config/application.rb
.
Se stai usando RSpec, è anche necessario rimuovere (in spec_helper):
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
e rimuovere
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
Anche Commento il
# config/application.rb
config.active_record.whitelist_attributes = true
(indicato su rotaie 3.2.13)