ruby on rails - que - Eliminar ActiveRecord en Rails 3
ruby on rails que es (7)
Para una nueva aplicación de rieles, puede hacer que excluya el registro activo especificando el parámetro --skip-active-record. P.ej:
rails new appname --skip-active-record
Ahora que salió Rails 3 beta, pensé en reescribir una aplicación en la que comencé a trabajar en Rails 3 beta, tanto para tener una idea como para obtener un poco de ventaja. 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:
config.frameworks -= [ :active_record ] # inside environment.rb
En la última versión, esto no funciona, solo arroja 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 examinado boot.rb como sugería, 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 se debe a que he borrado database.yml
y lo he reemplazado con detalles de conexión para MongoDB con el fin de utilizar esta idea para usar database.yml para detalles de conexión de MongoDB. No estoy seguro de por qué necesita poder iniciar una conexión de base de datos para generar un controlador de todos modos ...
¿Alguien está al tanto de la forma correcta de Rails 3 de hacer esto?
Si está ejecutando rspec, también debe 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
Si generó un nuevo proyecto utilizando Rails 3.2, también deberá comentar:
config.active_record.mass_assignment_sanitizer = :strict
y
config.active_record.auto_explain_threshold_in_seconds = 0.5
en su archivo development.rb .
También comente
# config/application.rb
config.active_record.whitelist_attributes = true
(señalado en los rieles 3.2.13)
Todo lo mencionado es cierto. La única cosa más que tuve que hacer en Rails 3.1 es comentar
config.active_record.identity_map = true
en config/application.rb
.
Voy a leer esta fuente, así que avíseme si realmente funcionó. :)
El comando de rails
que genera la plantilla de aplicación ahora tiene una opción -O
, que le indica que omita ActiveRecord.
Si no desea volver a ejecutar los rails
, debe verificar lo siguiente en su aplicación existente:
Compruebe que su
config/application.rb
norequire ''rails/all''
orequire "active_record/railtie"
. En cambio, para una configuración estándar de Rails sin ActiveRecord, solo debe tener lo siguiente que requiere: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ónconfig.generators
, asegúrese de que no tenga la líneag.orm :active_record
. Puede establecer esto explícitamente ennil
, si lo desea, pero este debería ser el predeterminado cuandog.orm
se omita por completo.Opcional, pero en su
Gemfile
, elimine la líneagem
que carga el módulo para su base de datos. Esta podría ser la líneagem "mysql"
por ejemplo.
Carriles 4
Estaba buscando cómo deshabilitarlo en rieles 4 y solo encontré esta respuesta que ya no funciona en rieles 4. Así es como puedes hacerlo en rieles 4 (probado en RC1).
En un nuevo proyecto
rails new YourProject --skip-active-record
En un proyecto existente
- En su Gemfile, elimine la gema del controlador de la base de datos, por ejemplo,
gem ''sqlite3''
ogem ''pg''
. En config / application.rb, reemplace
require ''rails/all''
conrequire "action_controller/railtie" require "action_mailer/railtie" require "sprockets/railtie" require "rails/test_unit/railtie"
En config / environments / development.rb, eliminar o comentar
config.active_record.migration_error = :page_load
Potencialmente tiene que eliminar active_record helpers desde el spec_helper (a través de VenoM en los comentarios)
Potencialmente tiene que eliminar el middleware ConnectionManagement (parece ser el caso con unicornio):
config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
(a través de https://.com/a/18087332/764342 )
Espero que esto ayude a otros a buscar cómo desactivar ActiveRecord en Rails 4.