繁体   English   中英

如何在没有数据库的情况下配置 Ruby on Rails?

[英]How to configure Ruby on Rails with no database?

对于当前不需要数据库的小型网站项目,使用 Ruby on Rails 会很方便。 我知道我可以在 MySQL 中创建一个空数据库并从那里开始,但是有没有人知道在没有数据库的情况下运行 Rails 的更好方法?

谢谢

对于Rails 3Rails 4

使用-O (大写 'O')或--skip-activerecord选项生成没有数据库的应用程序。

rails new myApp -O

要么

rails new myApp --skip-activerecord

这个答案是从这里转发的


对于Rails 5

使用--skip-active-record选项生成没有数据库的应用程序

请注意与以前的 Rails 版本相反的额外连字符“-”

rails new myApp --skip-active-record

对于现有的 Rails 4/5/6 项目,在config/application.rb文件中包含以下行:

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

(作为参考,该行正在加载此文件
因此,您必须按如下方式分别加载每个库,而不是加载 ALL:

# 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

请留意评论以了解有关您的 Rails 版本的加载内容。
还要检查以下文件(以防万一)并注释以下几行:

# 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

还要删除模型文件中对ActiveRecord::Base任何引用(如果适用,也可以简单地删除这些文件)。 例如,自动生成的app/models/application_record.rb文件。

environment.rb文件中取消注释这一行:

config.frameworks -= [ :active_record, :active_resource, :action_mailer]

更新:请参阅' Rails 3 - 如何完全避免使用数据库? '使用Rails 3进行更新的问题。

在 Rails 4 中开始新项目时,您可以使用 -O 或 --skip-active-record

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

如果您已经创建了一个项目,则需要发表评论

 require "active_record/railtie"

从 config/application.rb 和

 config.active_record.migration_error = :page_load

来自 config/environments/development.rb

如果您不需要数据库,那么您可能不需要拥有大量的 Rails。 您可能需要一个更小、更可定制的框架来使用。

Sinatra是一个很小的框架,非常适合提供基本的静态页面。

但是,如果您坚持使用 Rails,这里有一篇文章将向您展示如何做到这一点或在这里

为了支持 Rails 6 rc1 和activerecord-nulldb-adapter gem,我们需要一个猴子补丁

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM