Wie konfiguriere ich Ruby on Rails ohne Datenbank?

101

Es wäre praktisch, Ruby on Rails für ein kleines Website-Projekt zu verwenden, für das derzeit keine Datenbank erforderlich ist. Ich weiß, dass ich eine leere Datenbank in MySQL erstellen und von dort aus fortfahren kann, aber kennt jemand eine bessere Möglichkeit, Rails ohne Datenbank auszuführen?

Vielen Dank

RobbieCanuck
quelle

Antworten:

55

Kommentieren Sie diese Zeile in der environment.rbDatei aus:

config.frameworks -= [ :active_record, :active_resource, :action_mailer]
typemismatch
quelle
2
in Schienen 3 entfernen Sie einfach den MySQL-Edelstein aus dem Gemfile
jspooner
31
Wie würden Sie dasselbe in Rails 4 tun?
Daniel Ristic
2
Frage für Schienen 4 stackoverflow.com/questions/19078044/…
grumpasaurus
108

Für Schienen 3 und Schienen 4 :

Verwenden Sie -O(Großbuchstabe 'O') oder die --skip-activerecordOption, um eine Anwendung ohne Datenbank zu generieren.

rails new myApp -O

oder

rails new myApp --skip-activerecord

Diese Antwort wird von geteilt hier aus erneut geteilt


Zum Schienen 5 :

Verwenden --skip-active-record Option, um eine Anwendung ohne Datenbank zu generieren

Beachten Sie den zusätzlichen Bindestrich '-' im Gegensatz zu früheren Rails-Versionen .

rails new myApp --skip-active-record

RSK
quelle
2
Ja, das funktioniert mit Rails 4 :) - gerade validiert. Wenn Sie das Testgerät loswerden möchten, verwenden Sie: Schienen neues myApp-O - Skip-Bundle -T
Chris Hough
1
Dies ist definitiv der einfachste Weg, wenn Sie von vorne beginnen. Beachten Sie jedoch, dass (zumindest in Rails 4.0.1) in diesem Befehl ein '-' zwischen aktiv und Datensatz vorhanden ist. Also sollte es lauten: Rails New MyApp - Skip-Active-Record
Nic Benders
1
Ich habe mich nur den Problemen gestellt und es bemerkt. Für Rails 4.2.x -Ofunktioniert nur . Die Option --skip-activerecordfunktioniert nicht.
Nazar Hussain
Dies funktioniert auch in Rails-API: Rails New MyApp -O. Danke
Abel
2
Falls sich jemand wundert, ist es in Rails 5 --skip-active-record(beachten Sie den Bindestrich zwischen aktivem und nicht aufgezeichnetem Datensatz). Der andere Weg funktioniert bei mir nicht.
Audiodude
53

Für ein vorhandenes Rails 4/5/6 Projekt haben Sie in Ihrer config/application.rbDatei die folgende Zeile:

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

(Als Referenz lädt diese Zeile diese Datei. )
Anstatt ALL zu laden, müssen Sie jede Bibliothek wie folgt separat laden:

# 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

Behalten Sie die Kommentare im Auge, um zu erfahren, was Sie in Bezug auf Ihre Rails-Version laden müssen.
Überprüfen Sie auch die folgenden Dateien (falls vorhanden) und kommentieren Sie die folgenden Zeilen:

# 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

Entfernen Sie auch alle Verweise auf ActiveRecord::Basein Ihren Modelldateien (oder löschen Sie die Dateien einfach, falls zutreffend). Zum Beispiel die automatisch generierte app/models/application_record.rbDatei.

Alter Lagos
quelle
2
Für Rails 5 möchten Sie möglicherweise auch active_job/railtieundaction_cable/engine
Ingmaras Keleras
2
Gibt es nicht einen Dummy-DB-Adapter database.yml, der die DB einfach ignoriert?
Chloe
Schienen 5 führen dann zu dem Problem des Ausfalls rake assets:precompileaufgrund von NoMethodError: undefined method active_record'`: /
flp
2
@Chloe Die activerecord-nulldb-adaptervon github.com/nulldb/nulldb können Sie die Swap - Adapter für eine temporäre oder weniger invasive Veränderung.
Unixmonkey
1
@cdmo hey, danke fürs bemerken. Ich habe die Antwort aktualisiert, um sie vollständig mit Rails 6 kompatibel zu machen. Ich bin mir nicht sicher, was Sie in Ihrer Antwort kommentiert haben, da ich 2 Rails-Apps mit und ohne Rails erstelle -Ound action_mailernicht damit verwandt bin. Daher ist config/detabase.ymles nicht erforderlich, sie zu kommentieren. Es gibt auch einige zusätzliche Zeilen, die kommentiert werden müssen, nachdem sie active_storagekommentiert wurden.
Alter Lagos
16

In Rails 4 können Sie beim Starten eines neuen Projekts -O oder --skip-active-record verwenden

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

Wenn Sie bereits ein Projekt erstellt haben, müssen Sie einen Kommentar abgeben

 require "active_record/railtie"

von config / application.rb und

 config.active_record.migration_error = :page_load

aus config / environment / development.rb

John Barela
quelle
14

Wenn Sie keine Datenbank benötigen, müssen Sie wahrscheinlich nicht den Großteil der Rails haben. Möglicherweise möchten Sie ein kleineres, anpassbareres Framework verwenden.

Sinatra ist ein winziges Framework, das sich hervorragend zum Bereitstellen grundlegender statischer Seiten eignet.

Wenn Sie jedoch darauf bestehen, Rails zu verwenden, finden Sie hier einen Artikel, der Ihnen zeigt, wie Sie genau das tun können, oder hier .

vrish88
quelle
Vielen Dank. Beide Links beziehen sich auf das Rails Recipes-Buch und enthalten Schritte, mit denen Sie das Testen mit einer datenbanklosen Rails-Anwendung durchführen können. Ich war faul und hoffte, die bereits auf dem Server vorhandene Rails-Infrastruktur für andere Apps nutzen zu können, aber Sintatra sieht faszinierend aus.
RobbieCanuck
1
Ich bin nicht einverstanden. Active.com basiert auf Rails ohne Datenbank, da alle Daten von einer API stammen.
Jspooner
Hinweis: Der zweite Link im letzten Satz existiert nicht mehr. Ich erhalte einen 404 nicht gefundenen Fehler.
Pamela Cook - LightBe Corp
0

Zur Unterstützung der Schienen 6 rc1 und activerecord-nulldb-adapter gem benötigen wir ein Affen-Patching

In 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
quelle