99

现在 Rails 3 测试版发布了,我想我应该看看重写一个我刚刚开始在 Rails 3 测试版中工作的应用程序,既要感受它,又要抢占先机。该应用程序的所有模型都使用 MongoDB 和 MongoMapper,因此不需要 ActiveRecord。在以前的版本中,我通过以下方式卸载 activerecord:

config.frameworks -= [ :active_record ]    # inside environment.rb

在最新版本中,这不起作用 - 它只是抛出一个错误:

/Library/Ruby/Gems/1.8/gems/railties-3.0.0.beta/lib/rails/configuration.rb:126:in
  `frameworks': config.frameworks in no longer supported. See the generated 
  config/boot.rb for steps on how to limit the frameworks that will be loaded 
  (RuntimeError)
 from *snip*

当然,我已经按照它的建议查看了 boot.rb,但据我所知,这里没有关于如何卸载 AR 的线索。我需要这样做的原因不仅是因为加载我不想要的东西是愚蠢的,而且即使我尝试为控制器运行生成器,它也会抱怨它无法建立数据库连接。这是因为我已将其擦除database.yml并替换为 MongoDB 的连接详细信息,以便使用此要点将 database.yml 用于 MongoDB 连接详细信息。不知道为什么它需要能够启动数据库连接只是为了生成一个控制器......

有人知道正确的 Rails 3 方法吗?

4

7 回答 7

155

我是通过阅读源代码来完成的,所以让我知道它是否真的有效。:)

生成应用程序模板的rails命令现在有一个选项-O,告诉它跳过 ActiveRecord。

如果您不想重新运行rails,则应在现有应用程序中检查以下内容:

  • 检查您的config/application.rb 没有require 'rails/all'require "active_record/railtie"。相反,对于没有 ActiveRecord 的标准 Rails 设置,它应该只有以下要求:

    require File.expand_path('../boot', __FILE__)
    
    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "active_resource/railtie"
    require "rails/test_unit/railtie"
    require "sprockets/railtie"
    
    # Auto-require default libraries and those for the current Rails environment. 
    Bundler.require :default, Rails.env
    
  • 如果在 中config/application.rb,您正在使用该config.generators部分,请确保它没有g.orm :active_record. 如果需要,您可以将其显式设置为,但是当完全省略nil时,这应该是默认值。g.orm

  • 可选,但在您的 中Gemfile,删除gem为您的数据库加载模块的行。例如,这可能是行gem "mysql"

于 2010-02-06T11:02:58.557 回答
46

导轨 4

我一直在寻找如何在 rails 4 中禁用它,但发现这个答案在 rails 4 中不再有效。所以这就是您可以在 rails 4 中执行此操作的方法(在 RC1 中测试)。

在一个新项目中

rails new YourProject --skip-active-record

在现有项目中

  • 在您的 Gemfile 中,删除数据库驱动程序 gem,例如gem 'sqlite3'gem 'pg'.
  • 在 config/application.rb 中,替换require 'rails/all'

    需要“action_controller/railtie”
    需要“action_mailer/railtie”
    需要“链轮/导轨”
    需要“rails/test_unit/railtie”
    

  • 在 config/environments/development.rb 中,删除或注释掉config.active_record.migration_error = :page_load

  • 您可能必须从 spec_helper 中删除 active_record 助手(通过评论中的 VenoM)

  • 可能您必须删除 ConnectionManagement 中间件(似乎是独角兽的情况):(config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"通过https://stackoverflow.com/a/18087332/764342

我希望这可以帮助其他人寻找如何在 Rails 4 中禁用 ActiveRecord。

于 2013-05-18T10:19:48.597 回答
36

对于新的 rails 应用程序,您可以通过指定 --skip-active-record 参数让它排除活动记录。例如:

rails new appname --skip-active-record
于 2011-12-18T22:56:07.733 回答
15

如果您使用 Rails 3.2 生成了一个新项目,您还需要注释掉:

config.active_record.mass_assignment_sanitizer = :strict

config.active_record.auto_explain_threshold_in_seconds = 0.5

在你的development.rb文件中。

于 2012-02-04T06:56:14.360 回答
6

以上都是真实的。我在 rails 3.1 中必须做的另一件事是注释掉

config.active_record.identity_map = true

config/application.rb.

于 2011-05-27T18:06:26.830 回答
2

如果您正在运行 rspec,您还需要删除(在 spec_helper 中):

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

并删除

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true
于 2013-04-23T10:09:24.580 回答
1

注释掉_

# config/application.rb    
config.active_record.whitelist_attributes = true

(在轨道 3.2.13 上注明)

于 2013-04-03T15:01:24.003 回答