Bagaimana cara mengkonfigurasi Ruby on Rails tanpa database?

102

Akan lebih mudah menggunakan Ruby on Rails untuk proyek situs web kecil yang saat ini tidak membutuhkan database. Saya tahu saya bisa membuat database kosong di MySQL dan pergi dari sana, tetapi apakah ada yang tahu cara yang lebih baik untuk menjalankan Rails tanpa database?

Terima kasih

RobbieCanuck
sumber

Jawaban:

55

Batalkan komentar baris ini di environment.rbfile:

config.frameworks -= [ :active_record, :active_resource, :action_mailer]
typemismatch
sumber
2
di rel 3 cukup hapus permata mysql dari Gemfile
jspooner
31
Bagaimana Anda melakukan hal yang sama di Rails 4?
Daniel Ristic
2
Pertanyaan untuk Rails 4 stackoverflow.com/questions/19078044/…
grumpasaurus
109

Untuk Rails 3 dan Rails 4 :

Gunakan -O(Capital 'O') atau --skip-activerecordopsi untuk menghasilkan aplikasi tanpa database.

rails new myApp -O

atau

rails new myApp --skip-activerecord

Jawaban ini dibagikan ulang dari sini


Untuk Rails 5 :

Gunakan --skip-active-recordopsi untuk menghasilkan aplikasi tanpa database

Perhatikan tanda hubung ekstra '-' sebagai lawan dari versi Rails sebelumnya .

rails new myApp --skip-active-record

RSK
sumber
2
ya, ini berfungsi dengan Rails 4 :) - baru saja divalidasi. Jika Anda ingin membuang penggunaan unit uji: rel myApp-O baru - lewati-bundel -T
Chris Hough
1
Ini jelas merupakan cara termudah untuk pergi jika Anda memulai dari awal, meskipun diperingatkan bahwa (setidaknya di Rails 4.0.1) ada '-' antara aktif dan rekam dalam perintah itu. Jadi itu harus membaca: rel baru myApp --skip-active-record
Nic Benders
1
Saya baru saja menghadapi masalah dan memperhatikan. Untuk Rails 4.2.x hanya -Oberfungsi. Opsi --skip-activerecordtidak berfungsi.
Nazar Hussain
Ini juga berfungsi di rails-api: rails new myApp -O. Terima kasih
Abel
2
Jika ada yang bertanya-tanya, di Rails 5 itu --skip-active-record(perhatikan tanda hubung antara catatan nad aktif). Cara lain tidak berhasil untuk saya.
audiodude
53

Untuk proyek Rails 4/5/6 yang ada, dalam config/application.rbfile Anda, Anda memiliki baris berikut:

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

(Sebagai referensi baris tersebut memuat file ini )
Jadi, alih-alih memuat SEMUA, Anda harus memuat setiap pustaka secara terpisah sebagai berikut:

# 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

Perhatikan komentar untuk mengetahui apa yang harus dimuat terkait versi Rails Anda.
Periksa juga file berikut (jika Anda memilikinya) dan beri komentar pada baris berikut:

# 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

Hapus juga referensi apa pun ActiveRecord::Basedi file model Anda (atau cukup hapus file jika berlaku). Misalnya, app/models/application_record.rbfile yang dibuat secara otomatis .

Alter Lagos
sumber
2
Untuk Rails 5 Anda mungkin juga ingin membutuhkan active_job/railtiedanaction_cable/engine
Ingmaras Keleras
2
Apakah tidak ada adaptor DB tiruan untuk digunakan database.ymlsehingga hanya akan mengabaikan DB?
Chloe
Rails 5 kemudian mengarah ke masalah kegagalan rake assets:precompilekarena NoMethodError: undefined method active_record'`: /
flp
3
@Chloe The activerecord-nulldb-adapterdari github.com/nulldb/nulldb memungkinkan Anda menukar adaptor untuk perubahan sementara atau kurang invasif.
Unixmonkey
1
@cdmo hei, terima kasih sudah memperhatikan. Saya telah memperbarui jawaban untuk membuatnya sepenuhnya kompatibel dengan rails 6. Tidak yakin tentang semua yang Anda komentari dalam jawaban Anda saat saya membuat 2 aplikasi rails dengan dan tanpa -Odan action_mailertidak terkait dengan config/detabase.yml, jadi tidak perlu mengomentarinya. Juga ada beberapa baris tambahan untuk dikomentari setelah active_storagedikomentari.
Alter Lagos
16

Di Rails 4 saat memulai proyek baru, Anda dapat menggunakan -O atau --skip-active-record

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

Jika Anda sudah membuat proyek, Anda perlu memberi komentar

 require "active_record/railtie"

dari config / application.rb dan

 config.active_record.migration_error = :page_load

dari config / environment / development.rb

John Barela
sumber
14

Jika Anda tidak memerlukan database, Anda mungkin tidak perlu memiliki sebagian besar Rails. Anda mungkin menginginkan kerangka kerja yang lebih kecil dan dapat disesuaikan untuk digunakan.

Sinatra adalah kerangka kerja kecil yang bagus untuk menyajikan halaman statis dasar.

Tetapi jika Anda bersikeras untuk menggunakan Rails, berikut adalah artikel yang akan menunjukkan cara melakukannya atau di sini .

vrish88
sumber
Terima kasih - kedua tautan ini merujuk ke buku Rails Recipes dan berisi langkah-langkah agar pengujian bekerja dengan aplikasi rel tanpa database. Saya malas dan berharap dapat memanfaatkan infrastruktur rel yang sudah ada di server untuk aplikasi lain, tetapi Sintatra terlihat menarik.
RobbieCanuck
1
Saya tidak setuju. Active.com dibangun di Rails tanpa database karena semua data berasal dari api.
jspooner
Catatan: Tautan kedua di kalimat terakhir tidak ada lagi. Saya mendapatkan kesalahan 404 tidak ditemukan.
Pamela Cook - LightBe Corp
0

Untuk mendukung Rails 6 rc1 dan activerecord-nulldb-adaptergem kita membutuhkan monkey patching

Dalam config / penginisialisasi / 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
sumber