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

Rob*_*uck 96 ruby-on-rails

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

谢谢

RSK*_*RSK 104

对于Rails 3Rails 4:

使用-O(Capital'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. (3认同)
  • 是的,这适用于Rails 4 :) - 只是验证.如果你想放弃测试单元使用:rails new myApp -O --skip-bundle -T (2认同)
  • 如果有人想知道,在Rails 5中它是`--skip-active-record`(注意活动nad记录之间的破折号).另一种方式对我不起作用. (2认同)

typ*_*tch 55

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

config.frameworks -= [ :active_record, :active_resource, :action_mailer]
Run Code Online (Sandbox Code Playgroud)

  • 你会如何在Rails 4中做同样的事情? (31认同)
  • 在rails 3中只需从Gemfile中删除mysql gem (2认同)
  • Rails 4的问题http://stackoverflow.com/questions/19078044/disable-activerecord-for-rails-4 (2认同)

Alt*_*gos 47

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

require 'rails/all'
Run Code Online (Sandbox Code Playgroud)

(作为参考,该行正在加载此文件)
因此,您必须单独加载每个库,而不是加载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 "active_storage/engine" # Only for Rails >= 5.2
require "action_mailbox/engine" # Only for Rails >= 6.0
require "action_text/engine" # Only for Rails >= 6.0
require "sprockets/railtie"
require "rails/test_unit/railtie"
Run Code Online (Sandbox Code Playgroud)

密切关注评论,了解有关Rails版本的内容.然后评论以下几行:

#config/environments/development.rb
config.active_record.migration_error = :page_load
config.active_record.verbose_query_logs = true

#config/environments/production.rb
config.active_record.dump_schema_after_migration = false

#spec/rails_helper.rb
ActiveRecord::Migration.maintain_test_schema!

# Only for Rails >= 5.0
#config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = true
Run Code Online (Sandbox Code Playgroud)

您可以选择删除对类的任何引用ActiveRecord.

rm app/models/application_record.rb
Run Code Online (Sandbox Code Playgroud)

  • @Chloe https://github.com/nulldb/nulldb 中的 `activerecord-nulldb-adapter` 允许您更换适配器以进行临时或侵入性较小的更改。 (3认同)
  • 对于Rails 5,您可能还需要`active_job/railtie`和`action_cable/engine` (2认同)
  • 在`database.yml` 中是不是有一个虚拟的数据库适配器可以使用,所以它会忽略数据库? (2认同)

dou*_*asr 22

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


小智 15

在Rails 4中,当启动一个新项目时,你可以使用-O或--skip-active-record

rails new my_project -O
rails new my_project --skip-active-record
Run Code Online (Sandbox Code Playgroud)

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

 require "active_record/railtie"
Run Code Online (Sandbox Code Playgroud)

来自config/application.rb和

 config.active_record.migration_error = :page_load
Run Code Online (Sandbox Code Playgroud)

来自config/environments/development.rb


vri*_*h88 14

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

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

但是,如果你坚持使用Rails 这里有一篇文章,它将告诉你如何做到这一点或在这里.

  • Sinatra +1,这正是我想要的 (2认同)