【发布时间】:2010-10-23 16:53:08
【问题描述】:
在目前不需要数据库的小型网站项目中使用 Ruby on Rails 会很方便。我知道我可以在 MySQL 中创建一个空数据库并从那里开始,但是有人知道在没有数据库的情况下运行 Rails 的更好方法吗?
谢谢
【问题讨论】:
标签: ruby-on-rails
在目前不需要数据库的小型网站项目中使用 Ruby on Rails 会很方便。我知道我可以在 MySQL 中创建一个空数据库并从那里开始,但是有人知道在没有数据库的情况下运行 Rails 的更好方法吗?
谢谢
【问题讨论】:
标签: ruby-on-rails
在environment.rb 文件中取消注释此行:
config.frameworks -= [ :active_record, :active_resource, :action_mailer]
【讨论】:
【讨论】:
对于 Rails 3 和 Rails 4:
使用
-O(Capital 'O') 或--skip-activerecord选项生成没有数据库的应用程序。
rails new myApp -O
或
rails new myApp --skip-activerecord
此答案由here转发
对于 Rails 5:
使用
--skip-active-record选项生成没有数据库的应用程序
请注意额外的连字符“-”,而不是以前的 Rails 版本。
rails new myApp --skip-active-record
【讨论】:
-O 有效。 --skip-activerecord 选项不起作用。
--skip-active-record(注意活动 nad 记录之间的破折号)。另一种方法对我不起作用。
在 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 4/5/6 项目,在您的 config/application.rb 文件中,您有以下行:
require 'rails/all' # or `require "rails"' in newer versions
(作为参考,该行正在加载this file)
因此,您必须按如下方式分别加载每个库,而不是加载 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
密切关注 cmets 以了解有关您的 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 文件。
【讨论】:
active_job/railtie 和 action_cable/engine
database.yml 中没有要使用的虚拟数据库适配器,所以它会忽略数据库吗?
NoMethodError: undefined method active_record'` 导致rake assets:precompile 失败的问题:/
activerecord-nulldb-adapter 允许您更换适配器以进行临时或侵入性较小的更改。
-O 和 action_mailer 的 rails 应用程序与 config/detabase.yml 无关,所以没有必要评论它。在active_storage 被评论后还有一些额外的行要评论。
为了支持 Rails 6 rc1 和 activerecord-nulldb-adaptergem,我们需要一个猴子补丁
在 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
【讨论】: