2010-02-06 23 views
99

Ahora que salió Rails 3 beta, pensé en reescribir una aplicación en la que comencé a trabajar en Rails 3 beta, tanto para sentirme como para obtener un poco de una ventaja inicial. La aplicación utiliza MongoDB y MongoMapper para todos sus modelos y, por lo tanto, no tiene necesidad de ActiveRecord. En la versión anterior, estoy descargando activerecord de la siguiente manera:Eliminar ActiveRecord en Rails 3

config.frameworks -= [ :active_record ] # inside environment.rb 

En la última versión esto no funciona - sólo se genera un error:

/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* 

Por supuesto, he mirado el boot.rb como sugirió, pero hasta donde puedo ver, no hay ninguna pista aquí sobre cómo podría descargar AR. La razón por la que necesito hacer esto es porque no solo es una tontería cargar algo que no quiero, sino que se queja de su incapacidad para hacer una conexión de base de datos incluso cuando intento ejecutar un generador para un controlador. Esto es porque borré database.yml y lo reemplacé con detalles de conexión para MongoDB para usar this gist para usar database.yml para los detalles de conexión de MongoDB. No estoy seguro de por qué necesita poder iniciar una conexión de base de datos solo para generar un controlador de todos modos ...

¿Alguien está al tanto de la forma correcta de Rails 3 de hacer esto?

Respuesta

155

Voy a leer esta fuente, así que avíseme si realmente funcionó. :)

El comando rails que genera la plantilla de la aplicación ahora tiene una opción -O, que le indica que omita ActiveRecord.

Si no tiene ganas de volver a ejecutar rails, debe comprobar lo siguiente en su aplicación existente:

  • Compruebe que el config/application.rbno tienerequire 'rails/all' o require "active_record/railtie". En cambio, para una configuración estándar de rieles sin ActiveRecord, debe tener única requiere lo siguiente:

    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 
    
  • Si, en config/application.rb, está utilizando la sección config.generators, asegúrese de que no tiene la línea g.orm :active_record . Puede establecer esto explícitamente en nil, si lo desea, pero este debería ser el predeterminado cuando g.orm se omite por completo.

  • Opcional, pero en su Gemfile, elimine la línea gem que carga el módulo para su base de datos. Esta podría ser la línea gem "mysql" por ejemplo.

+3

Sí, eso parece haber hecho. Parece que la opción -O también se puede invocar como '--skip-activerecord'. Ejecuté el comando rails para otra aplicación (temporal) con esta opción y generó una nueva plantilla de aplicación que coincidía exactamente con lo que escribió anteriormente. Así que podría copiar y pegar estos cambios en mi aplicación real. Gracias - buen hallazgo :) –

+1

Excelente - gracias por --skip-activerecord. Eso es justo lo que necesitaba. – Finglas

+0

Eso funciona en su mayor parte, excepto cuando genero carriles generados, todavía veo cosas de ActiveRecord allí, ¿cómo lo elimino? – Hackeron

6

Todo lo anterior es cierto. La otra cosa que tuve que hacer en los carriles 3.1 es crear un comentario en

config.active_record.identity_map = true 

en config/application.rb.

36

Para una nueva aplicación de rieles, puede hacer que excluya el registro activo especificando el parámetro --skip-active-record.Por ejemplo:

rails new appname --skip-active-record 
+0

Lo hice y ejecuté algunos diffs para encontrar y eliminar las cosas en mi aplicación actual que estaba usando ActiveRecord –

15

Si ha generado un nuevo proyecto usando Rails 3.2, también se necesitará comentar:

config.active_record.mass_assignment_sanitizer = :strict 

y

config.active_record.auto_explain_threshold_in_seconds = 0.5 

en su development.rb archivo .

1

también comentario cabo

# config/application.rb  
config.active_record.whitelist_attributes = true 

(observado en los carriles 3.2.13)

2

Si está ejecutando rspec, también es necesario para eliminar (en spec_helper):

# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

y eliminar

# 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 
45

Carriles 4

que estaba buscando la manera de desactivarlo en los carriles 4 y sólo encontré esta respuesta que ya no trabaja en los carriles 4. Así que esta es la forma en que puede hacerlo en los carriles 4 (probado en RC1)

En un nuevo proyecto

rails new YourProject --skip-active-record 

En un proyecto existente

  • En su Gemfile, retire la gema controlador de base de datos, por ejemplo, gem 'sqlite3' o gem 'pg'.
  • En config/application.rb, reemplace require 'rails/all' con

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

  • En config/ambientes/development.rb, quite o comentario config.active_record.migration_error = :page_load

  • Potencialmente usted tiene que quitar ayudantes active_record del spec_helper (a través de veneno en los comentarios)

  • potencialmente usted tiene que quitar el middleware connectionManagement (que parece ser el caso con el unicornio): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement" (a través de https://stackoverflow.com/a/18087332/764342)

espero que esto ayude a otros que buscan la manera de desactivar ActiveRecord en Rails 4.

+3

¡Gracias! Aún así, debe eliminar los auxiliares de active_record de la ayuda de spec_helper (no obligatorio, pero si está ejecutando las especificaciones). Mira el último comentario de Rimian. – VenoM

+0

¡Ayúdame, gracias! Según los comentarios a continuación, puede haber otras declaraciones de configuración para comentar en los archivos application.rb y/o environments/{env} .rb. YMMV. –

+0

el activerecord aún permanece en el gemfile.lock ... ¿Podemos hacer algo en contra? – Boti

Cuestiones relacionadas