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?

È stato utile?

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 hanno require 'rails/all' o require "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 sezione config.generators, assicurarsi che non ha la linea di g.orm :active_record. È possibile impostare esplicitamente a nil, se si vuole, ma questo dovrebbe essere l'impostazione predefinita quando g.orm mancano totalmente.

  • Opzionale, ma nel tuo Gemfile, rimuovere la riga gem che carica il modulo per il database. Questa potrebbe essere la linea di gem "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' o gem 'pg'.
  • In config / application.rb, sostituire require 'rails/all' con

    require "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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top