禁用 Rails 4 的 ActiveRecord
Posted
技术标签:
【中文标题】禁用 Rails 4 的 ActiveRecord【英文标题】:Disable ActiveRecord for Rails 4 【发布时间】:2013-10-05 08:40:32 【问题描述】:我想在 Rails 4 中禁用 ActiveRecord。我在 config/application.rb
中做了以下操作
require File.expand_path('../boot', __FILE__)
# require 'rails/all' -- commented
require "action_controller/railtie"
require "action_mailer/railtie"
#require "active_resource/railtie" no need
#require "rails/test_unit/railtie" no need
#require "sprockets/railtie" no need
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)
module MyApp
class Application < Rails::Application
config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
end
end
我有一个错误
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/railtie/configuration.rb:95:in
method_missing: undefined method active_record for #<Rails::Application::Configuration:0x00000002005c38> (NoMethodError)
【问题讨论】:
为什么不直接使用rails new ... -O
来禁用activerecord?
是否需要 app_middleware.delete,甚至可能导致问题?
对于现有的 rails 4/5/6 应用程序,您可以禁用活动记录 following this answer。
【参考方案1】:
如果您正在创建一个新应用程序,您可以使用-O
跳过 ActiveRecord:
rails new my_app -O
对于现有应用程序:
1.从您的 Gemfile 中删除数据库适配器 gem(mysql2、sqlite3 等)
2。更改您的config/application.rb
删除require 'rails/all
行并要求您要使用的框架(在您的rails
版本中的available 中,列表各不相同,不要只是复制),例如:
require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
从config/application.rb
中删除config.active_record.raise_in_transactional_callbacks = true
3.删除您的 config/database.yml
文件、db/schema.rb
和迁移(如果有)
4.删除test/test_helper.rb
中的迁移检查
5.从您的 config/environments
文件中删除任何 ActiveRecord 配置(这是导致您的错误的原因)
对于一个空的 Rails 应用程序,这就是您需要做的所有事情。如果您遇到由现有代码引起的问题,堆栈跟踪应该为您提供有关需要更改的足够信息。例如,您的初始化程序中可能有一些 ActiveRecord 配置。
【讨论】:
除了这些更改之外,我还必须从 spec_helpers.rb 中删除几行(使用 RSpec):关于固定装置和事务。我也在使用 active_model,所以我在需求列表中用 active_model 替换了 active_record:***.com/questions/19078044/… 在哪里可以看到可用 Rails 框架的列表,以代替“rails/all”?require 'rails/all'
包含的所有内容的列表可以在here 找到。
一个月前我用rails new my_app -O
创建了一个应用程序。现在我想要活动记录。我现在需要添加哪些文件/宝石/配置?
我还必须从 config/application.rb
中删除 config.active_record.raise_in_transactional_callbacks = true
。【参考方案2】:
适用于带有 spec/dummy
应用的 Rails 插件(或 gem)
当您的 Rails 应用程序位于 spec/dummy
并且您从插件根目录启动服务器时。您可能仍然会收到以下错误:
Cannot load `Rails.application.database_configuration`: Could not load database configuration. No such file - ["config/database.yml"]
为避免这种情况,请删除文件bin/rails
中的require rails/all
并要求您要使用的框架,例如:
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
require "action_cable/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
【讨论】:
【参考方案3】:对于 Ruby On Rails 5.1.x 版
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
【讨论】:
【参考方案4】:对于 Rails 5:
如果您正在生成新应用
使用--skip-active-record
选项生成没有数据库的应用程序:
rails new myApp --skip-active-record
请注意额外的连字符“-”,而不是以前版本的 Rails。
【讨论】:
如果您已经创建了项目而没有跳过活动记录,只需在 config/environments/ 中注释所有 active_record 引用 # config.active_record.verbose_query_logs = true # config.active_record.migration_error = :page_load 并重命名你的 database.yml 文件到别的东西。那是为我做的。 也在 bin/setup => # system! 'bin/rails db:setup'【参考方案5】:由于这仍然是谷歌搜索禁用 Rails 5 的活动记录时的第一个命中,我将在此处添加:
适用于 Rails 5
执行@mechanicalfish 回答中的所有步骤,但也要删除该行
Rails.application.config.active_record.belongs_to_required_by_default = true
来自
config/initializers/new_framework_defaults.rb
【讨论】:
【参考方案6】:嗨,这是默认的 rails new_app -O 提供的
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
在您的 config/application.rb
中此外,它没有 database.yml 并且没有 db/migrate/* 和 schema.rb
【讨论】:
对于 rails 5 require "action_cable/engine"【参考方案7】:要在 Rails 4.2 中禁用 ActiveRecord,您可以创建 config/initializers/middleware.rb
Rails.application.middleware.tap do |middleware|
middleware.delete ActiveRecord::Migration::CheckPending
middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
middleware.delete ActiveRecord::QueryCache
end
查看终端rake中间件
【讨论】:
【参考方案8】:对于那些使用rails-api gem 的人,在执行rails-api new my_api
时使用--skip-active-record
标志可能会遇到类似的错误。当前的修复(直到发布新的更正版 gem)是编辑您的 rails-api gem 以拥有this commit。使用bundle open
并用新的更正后的Gemfile
替换旧的Gemfile
。重新运行,你应该已经准备好了。
【讨论】:
以上是关于禁用 Rails 4 的 ActiveRecord的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4,ActiveRecord,查找当前用户未评论的所有帖子
Rails 6.1.4 中的 ActiveRecord 枚举行为更改
Rails 4 ActiveRecord 有很多通过关系不能从 sql 文件读取
如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?
Rails 4 - 生产资产:预编译导致 ActiveRecord::NoDatabaseError: FATAL: database does not exist