Jak skonfigurować Ruby on Rails bez bazy danych?

102

Byłoby wygodne użycie Ruby on Rails dla małego projektu strony internetowej, który obecnie nie potrzebuje bazy danych. Wiem, że mógłbym stworzyć pustą bazę danych w MySQL i stamtąd przejść, ale czy ktoś zna lepszy sposób na uruchamianie Railsów bez bazy danych?

Dzięki

RobbieCanuck
źródło

Odpowiedzi:

55

Odkomentuj ten wiersz w environment.rbpliku:

config.frameworks -= [ :active_record, :active_resource, :action_mailer]
typemismatch
źródło
2
w railsach 3 po prostu usuń klej mysql z Gemfile
jspooner
31
Jak byś zrobił to samo w Rails 4?
Daniel Ristic
2
Pytanie do Rails 4 stackoverflow.com/questions/19078044/ ...
grumpasaurus
109

Dla szyn 3 i 4 :

Użyj -O( --skip-activerecordduże „O”) lub opcji, aby wygenerować aplikację bez bazy danych.

rails new myApp -O

lub

rails new myApp --skip-activerecord

Ta odpowiedź jest udostępniana dalej stąd


Dla szyn 5 :

Użyj --skip-active-recordopcji, aby wygenerować aplikację bez bazy danych

Zwróć uwagę na dodatkowy myślnik „-” w przeciwieństwie do poprzednich wersji Railsów .

rails new myApp --skip-active-record

RSK
źródło
2
tak, to działa z Rails 4 :) - właśnie sprawdzone. Jeśli chcesz zrezygnować z jednostki testowej, użyj: szyn nowy myApp-O - skip-bundle -T
Chris Hough
1
Jest to zdecydowanie najłatwiejszy sposób, jeśli zaczynasz od zera, chociaż ostrzegamy, że (przynajmniej w Railsach 4.0.1) istnieje „-” między aktywnym a rekordem w tym poleceniu. Powinien więc brzmieć: rails new myApp - skip-active-record
Nic Benders
1
Właśnie zmierzyłem się z problemami i zauważyłem. Dla Rails 4.2.x tylko -Odziała. Ta opcja --skip-activerecordnie działa.
Nazar Hussain,
Działa to również w rails-api: rails new myApp -O. Dzięki
Abel
2
Na wypadek, gdyby ktoś się zastanawiał, w Railsach 5 to --skip-active-record(zwróć uwagę na myślnik między aktywnym rekordem a). Drugi sposób nie działa dla mnie.
audiodude
53

Dla istniejącego projektu Rails 4/5/6 w swoim config/application.rbpliku masz następującą linię:

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

(Jako odniesienie, ta linia ładuje ten plik )
Więc zamiast załadować ALL, musisz załadować każdą bibliotekę osobno w następujący sposób:

# 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

Obserwuj komentarze, aby wiedzieć, co załadować w odniesieniu do twojej wersji Railsów.
Sprawdź również następujące pliki (jeśli je masz) i skomentuj następujące linie:

# 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

Usuń także wszelkie odniesienia do ActiveRecord::Base w plikach modelu (lub po prostu usuń pliki, jeśli mają zastosowanie). Na przykład automatycznie wygenerowany app/models/application_record.rbplik.

Alter Lagos
źródło
2
W przypadku Rails 5 możesz również wymagać active_job/railtieiaction_cable/engine
Ingmaras Keleras
2
Czy nie ma atrapy adaptera DB do użycia, database.ymlwięc po prostu zignoruje bazę danych?
Chloe
Szyny 5 prowadzi następnie do problemu braku rake assets:precompilepowodu NoMethodError: undefined method active_record'`: /
FLP
3
@Chloe activerecord-nulldb-adapterz github.com/nulldb/nulldb pozwala zamieniać adaptera do czasowego lub mniej inwazyjnej zmiany.
Unixmonkey
1
@cdmo hej, dzięki za uwagę. Zaktualizowałem odpowiedź, aby była w pełni kompatybilna z rails 6. Nie jestem pewien wszystkiego, co skomentowałeś w swojej odpowiedzi, ponieważ tworzę aplikacje na 2 railsy zi bez -Oi action_mailernie są z nimi związane config/detabase.yml, więc nie ma potrzeby komentowania. Istnieje również kilka dodatkowych linii do skomentowania po active_storageskomentowaniu.
Alter Lagos
16

W Rails 4 podczas rozpoczynania nowego projektu możesz użyć -O lub --skip-active-record

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

Jeśli utworzyłeś już projekt, będziesz musiał skomentować

 require "active_record/railtie"

z config / application.rb i

 config.active_record.migration_error = :page_load

z config / environment / development.rb

John Barela
źródło
14

Jeśli nie potrzebujesz bazy danych, prawdopodobnie nie potrzebujesz większości Railsów. Możesz potrzebować mniejszej, bardziej dostosowywalnej platformy do pracy.

Sinatra to niewielki framework, który świetnie nadaje się do obsługi podstawowych statycznych stron.

Ale jeśli nalegasz na używanie Railsów, tutaj jest artykuł, który pokaże ci, jak to zrobić lub tutaj .

vrish88
źródło
Dzięki - oba te linki odsyłają do książki Rails Recipes i zawierają kroki prowadzące do uruchomienia testów z aplikacją railsową bez bazy danych. Byłem leniwy i miałem nadzieję, że wykorzystam infrastrukturę szyn już na serwerze do innych aplikacji, ale Sintatra wygląda intrygująco.
RobbieCanuck
1
Nie zgadzam się. Active.com jest zbudowany na Railsach bez bazy danych, ponieważ wszystkie dane pochodzą z interfejsu API.
jspooner
Uwaga: drugi link w ostatnim zdaniu już nie istnieje. Otrzymuję błąd 404 nie znaleziono.
Pamela Cook - LightBe Corp
0

Do obsługi szyn 6 rc1 i activerecord-nulldb-adapter gem potrzebujemy małpy patch

W 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
źródło