Làm thế nào để cấu hình Ruby on Rails không có cơ sở dữ liệu?


102

Sẽ rất tiện lợi khi sử dụng Ruby on Rails cho một dự án trang web nhỏ không có nhu cầu hiện tại về cơ sở dữ liệu. Tôi biết tôi có thể tạo một cơ sở dữ liệu trống trong MySQL và đi từ đó, nhưng có ai biết cách tốt hơn để chạy Rails mà không có cơ sở dữ liệu không?

Cảm ơn

Câu trả lời:



108

Đối với Rails 3Rails 4 :

Sử dụng -O(Viết hoa 'O') hoặc --skip-activerecordtùy chọn để tạo ứng dụng mà không có cơ sở dữ liệu.

rails new myApp -O

hoặc là

rails new myApp --skip-activerecord

Câu trả lời này được chia sẻ lại từ đây


Đối với Rails 5 :

Sử dụng --skip-active-recordtùy chọn để tạo ứng dụng mà không có cơ sở dữ liệu

Lưu ý thêm dấu gạch nối '-' trái ngược với các phiên bản Rails trước .

rails new myApp --skip-active-record


2
vâng, điều này hoạt động với Rails 4 :) - vừa được xác thực. Nếu bạn muốn mương kiểm tra đơn vị sử dụng: đường ray mới MyApp-O---skip bó -T
Chris Hough

1
Đây chắc chắn là cách dễ dàng nhất nếu bạn đang bắt đầu từ đầu, mặc dù được cảnh báo rằng (ít nhất là trong Rails 4.0.1) có dấu '-' giữa hoạt động và bản ghi trong lệnh đó. Vì vậy, nó nên đọc: Rails MyApp mới --skip-hoạt động kỷ lục
Nic Benders

1
Tôi chỉ đối mặt với các vấn đề và nhận thấy. Chỉ dành cho Rails 4.2.x-O hoạt động. Tùy chọn --skip-activerecordkhông hoạt động.
Nazar Hussain

Điều này cũng hoạt động trong rails-api: rails new myApp -O. Cảm ơn
Abel

2
Trong trường hợp có ai đó đang thắc mắc, thì trong Rails 5 đó là --skip-active-record(lưu ý dấu gạch ngang giữa bản ghi nad đang hoạt động). Cách khác không hiệu quả với tôi.
audiodude

53

Đối với một dự án Rails 4/5/6 hiện có, trong config/application.rbtệp của bạn, bạn có dòng sau:

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

(Tham chiếu dòng đó đang tải tệp này )
Vì vậy, thay vì tải TẤT CẢ, bạn phải tải từng thư viện riêng biệt như sau:

# 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

Theo dõi các nhận xét để biết những gì cần tải về phiên bản Rails của bạn.
Cũng kiểm tra các tệp sau (trong trường hợp bạn có chúng) và nhận xét những dòng sau:

# 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

Đồng thời xóa mọi tham chiếu đến ActiveRecord::Basetrong các tệp mô hình của bạn (hoặc chỉ cần xóa các tệp nếu áp dụng). Ví dụ: app/models/application_record.rbtệp được tạo tự động.


2
Đối với Rails 5 bạn cũng có thể muốn yêu cầu active_job/railtieaction_cable/engine
Ingmaras Keleras

2
Không có bộ điều hợp DB giả để sử dụng database.ymlvì vậy nó sẽ chỉ bỏ qua DB?
Chloe

Rails 5 sau đó dẫn đến sự cố không thành công rake assets:precompiledo NoMethodError: undefined method active_record
flp

3
@Chloe activerecord-nulldb-adapterTừ github.com/nulldb/nulldb cho phép bạn hoán đổi bộ điều hợp cho một thay đổi tạm thời hoặc ít xâm lấn hơn.
Unixmonkey

1
@cdmo này, cảm ơn vì đã chú ý. Tôi đã cập nhật câu trả lời để làm cho nó hoàn toàn tương thích với rails 6. Tôi không chắc chắn về tất cả những gì bạn đã nhận xét trong câu trả lời của mình vì tôi tạo 2 ứng dụng rails có và không có -Oaction_mailerkhông liên quan config/detabase.yml, vì vậy không cần phải nhận xét nó. Ngoài ra có một số dòng bổ sung để bình luận sau khi active_storageđược bình luận.
Alter Lagos

16

Trong Rails 4 khi bắt đầu một dự án mới, bạn có thể sử dụng -O hoặc --skip-active-record

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

Nếu bạn đã tạo một dự án, bạn sẽ cần nhận xét

 require "active_record/railtie"

từ config / application.rb và

 config.active_record.migration_error = :page_load

từ cấu hình / môi trường / phát triển.rb


14

Nếu bạn không cần cơ sở dữ liệu thì có thể bạn không cần phải có số lượng lớn Rails. Bạn có thể muốn một khuôn khổ nhỏ hơn có thể tùy chỉnh hơn để làm việc với.

Sinatra là một khuôn khổ nhỏ rất thích hợp để phục vụ các trang tĩnh cơ bản.

Nhưng nếu bạn khăng khăng muốn sử dụng Rails thì đây là một bài viết sẽ hướng dẫn bạn cách thực hiện điều đó hoặc tại đây .


Cảm ơn - cả hai liên kết này đều tham chiếu đến sách Công thức nấu ăn của Rails và chứa các bước để bắt đầu thử nghiệm hoạt động với ứng dụng đường ray không có cơ sở dữ liệu. Tôi đã lười biếng và hy vọng sẽ tận dụng cơ sở hạ tầng đường ray đã có trên máy chủ cho các ứng dụng khác, nhưng Sintatra trông rất hấp dẫn.
RobbieCanuck

1
Tôi không đồng ý. Active.com được xây dựng trên Rails không có cơ sở dữ liệu vì tất cả dữ liệu đến từ một api.
jspooner

Lưu ý: Liên kết thứ hai trong câu cuối cùng không còn tồn tại. Tôi gặp lỗi 404 không tìm thấy.
Pamela Cook - LightBe Corp

0

Để được hỗ trợ Rails 6 rc1 và activerecord-nulldb-adapter gem, chúng tôi cần một bản vá khỉ

Trong 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.