¿Cómo configurar Ruby on Rails sin base de datos?

102

Sería conveniente utilizar Ruby on Rails para un pequeño proyecto de sitio web que no necesita una base de datos actualmente. Sé que podría crear una base de datos vacía en MySQL e ir desde allí, pero ¿alguien conoce una mejor manera de ejecutar Rails sin una base de datos?

Gracias

RobbieCanuck
fuente

Respuestas:

55

Descomente esta línea en el environment.rbarchivo:

config.frameworks -= [ :active_record, :active_resource, :action_mailer]
typemismatch
fuente
2
en rieles 3 simplemente elimine la gema mysql del Gemfile
jspooner
31
¿Cómo harías lo mismo en Rails 4?
Daniel Ristic
2
Pregunta para Rails 4 stackoverflow.com/questions/19078044/…
grumpasaurus
108

Para Rails 3 y Rails 4 :

Utilice -O('O' mayúscula) o la --skip-activerecordopción para generar una aplicación sin una base de datos.

rails new myApp -O

o

rails new myApp --skip-activerecord

Esta respuesta se comparte desde aquí


Para rieles 5 :

Utilice la --skip-active-recordopción para generar una aplicación sin una base de datos

Observe el guión adicional '-' a diferencia de las versiones anteriores de Rails .

rails new myApp --skip-active-record

RSK
fuente
2
sí, esto funciona con Rails 4 :) - recién validado. Si desea deshacerse del uso de la unidad de prueba: rails new myApp-O --skip-bundle -T
Chris Hough
1
Esta es definitivamente la forma más fácil de hacerlo si está comenzando desde cero, aunque tenga en cuenta que (al menos en Rails 4.0.1) hay un '-' entre activo y registro en ese comando. Entonces debería leer: rails new myApp --skip-active-record
Nic Benders
1
Simplemente enfrenté los problemas y lo noté. Para Rails 4.2.x solo -Ofunciona. La opción --skip-activerecordno funciona.
Nazar Hussain
Esto también funciona en rails-api: rails new myApp -O. Gracias
Abel
2
En caso de que alguien se lo pregunte, en Rails 5 lo es --skip-active-record(observe el guión entre el registro activo y el registro). La otra forma no funciona para mí.
audiodude
53

Para un proyecto existente de Rails 4/5/6, en su config/application.rbarchivo tiene la siguiente línea:

require 'rails/all' # or `require "rails"' in newer versions

(Como referencia, esa línea está cargando este archivo )
Entonces, en lugar de cargar TODO, debe cargar cada biblioteca por separado de la siguiente manera:

# active_record is what we're not going to use it, so comment it "just in case"
# require "active_record/railtie" 

# This is not loaded in rails/all but inside active_record so add it if
# you want your models work as expected
require "active_model/railtie" 
# And now the rest
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "active_job/railtie" # Only for Rails >= 4.2
require "action_cable/engine" # Only for Rails >= 5.0
require "sprockets/railtie"
require "rails/test_unit/railtie"

# All these depend on active_record, so they should be excluded also
# require "action_text/engine" # Only for Rails >= 6.0
# require "action_mailbox/engine" # Only for Rails >= 6.0
# require "active_storage/engine" # Only for Rails >= 5.2

Esté atento a los comentarios para saber qué cargar con respecto a su versión de Rails.
También revisa los siguientes archivos (en caso de que los tengas) y comenta las siguientes líneas:

# package.json
"@rails/activestorage": "^6.0.0",

# app/javascript/packs/application.js
require("@rails/activestorage").start()

# bin/setup
system! 'bin/rails db:prepare'

# config/environments/development.rb
config.active_storage.service = :local # For Rails >= 5.2
config.active_record.migration_error = :page_load
config.active_record.verbose_query_logs = true

# config/environments/test.rb
config.active_storage.service = :test # For Rails >= 5.2

# config/environments/production.rb
config.active_storage.service = :local # For Rails >= 5.2
config.active_record.dump_schema_after_migration = false

# spec/rails_helper.rb
ActiveRecord::Migration.maintain_test_schema!

# test/test_helper.rb
fixtures :all # In case you're using fixtures

# Only for Rails >= 5.0
#config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = true

También elimine cualquier referencia a ActiveRecord::Baseen sus archivos de modelo (o simplemente elimine los archivos si corresponde). Por ejemplo, el app/models/application_record.rbarchivo autogenerado .

Alter Lagos
fuente
2
Para Rails 5, es posible que también desee active_job/railtieaction_cable/engine
solicitar
2
¿No hay un adaptador DB ficticio para usar, database.ymlpor lo que simplemente ignorará la base de datos?
Chloe
Rails 5 conduce entonces al problema de fallar rake assets:precompiledebido a NoMethodError: undefined method active_record'`: /
flp
3
@Chloe El activerecord-nulldb-adapterde github.com/nulldb/nulldb le permite cambiar el adaptador por un cambio temporal o menos invasivo.
Unixmonkey
1
@cdmo hey, gracias por darte cuenta. Actualicé la respuesta para que sea totalmente compatible con rieles 6. No estoy seguro de todo lo que comentó en su respuesta, ya que creo aplicaciones de 2 rieles con y sin -Oy action_mailerno está relacionado con config/detabase.yml, por lo que no es necesario comentarlo. También hay algunas líneas adicionales para comentar después de active_storagecomentar.
Alter Lagos
16

En Rails 4 al comenzar un nuevo proyecto, puede usar -O o --skip-active-record

rails new my_project -O
rails new my_project --skip-active-record

Si ya ha creado un proyecto, deberá comentar

 require "active_record/railtie"

desde config / application.rb y

 config.active_record.migration_error = :page_load

desde config / environment / development.rb

Juan Barela
fuente
14

Si no necesita una base de datos, probablemente no necesite tener la mayor parte de Rails. Es posible que desee trabajar con un marco más pequeño y personalizable.

Sinatra es un marco pequeño que es ideal para ofrecer páginas estáticas básicas.

Pero si insiste en usar Rails, aquí hay un artículo que le mostrará cómo hacer eso o aquí .

vrish88
fuente
Gracias, ambos enlaces hacen referencia al libro Rails Recipes y contienen los pasos para hacer que las pruebas funcionen con una aplicación de rails sin base de datos. Estaba siendo vago y esperaba aprovechar la infraestructura de rieles que ya estaba en el servidor para otras aplicaciones, pero Sintatra parece intrigante.
RobbieCanuck
1
Estoy en desacuerdo. Active.com está construido sobre Rails sin base de datos porque todos los datos provienen de una API.
jspooner
Nota: El segundo enlace de la última oración ya no existe. Recibo un error 404 no encontrado.
Pamela Cook - LightBe Corp
0

Para soporte Rails 6 rc1 y activerecord-nulldb-adaptergem necesitamos un parche de mono

En config / initializers / null_db_adapter_monkey_patches.rb

module ActiveRecord
  module ConnectionAdapters
    class NullDBAdapter < ActiveRecord::ConnectionAdapters::AbstractAdapter
      def new_table_definition(table_name = nil, is_temporary = nil)
        TableDefinition.new(table_name, is_temporary)
      end
    end
  end
end
S. Chub
fuente