在Rails 3中删除ActiveRecord

Mar*_*ing 99 ruby-on-rails ruby-on-rails-3

现在Rails 3测试版已经发布了,我想我会重新编写一个我刚刚开始在Rails 3测试版上工作的应用程序,这两个版本都是为了感受它并获得一些启动.该应用程序使用MongoDB和MongoMapper的所有模型,因此不需要ActiveRecord.在以前的版本中,我按以下方式卸载activerecord:

config.frameworks -= [ :active_record ]    # inside environment.rb
Run Code Online (Sandbox Code Playgroud)

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

/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*
Run Code Online (Sandbox Code Playgroud)

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

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

Sté*_*hen 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果,在config/application.rb,您正在使用该config.generators部分,请确保它没有该行g.orm :active_record.nil如果需要,可以明确地将其设置为,但这应该g.orm是完全省略时的默认值.

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

  • 在rails 3.1中,你还需要在`application.rb`文件中有`require'sprockets/railtie"`. (8认同)
  • 是的,似乎已经做到了.看来-O选项也可以作为'--skip-activerecord'调用.我使用此选项为另一个(临时)应用程序运行rails命令,它生成了一个与上面所写内容完全匹配的新应用程序模板.所以我可以将这些更改复制并粘贴到我的实际应用中.谢谢 - 很好找:) (3认同)

ape*_*ros 46

Rails 4

我一直在寻找如何在rails 4中禁用它,并且只找到了这个不再适用于rails 4的答案.所以这就是你在rails 4中做到这一点的方法(在RC1中测试).

在一个新项目中

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

在现有项目中

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

    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "sprockets/railtie"
    require "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"通过/sf/answers/1266113271/)

我希望这有助于其他人寻找如何在Rails 4中禁用ActiveRecord.

  • 谢谢!您还需要从spec_helper中删除active_record帮助程序(不是必需的,但如果您运行的是规范).请参阅Rimian的最新评论. (3认同)

Jim*_*rts 36

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

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


小智 15

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

config.active_record.mass_assignment_sanitizer = :strict
Run Code Online (Sandbox Code Playgroud)

config.active_record.auto_explain_threshold_in_seconds = 0.5
Run Code Online (Sandbox Code Playgroud)

在您的development.rb文件中.


Mic*_*lis 6

所有这些都是真的.我在rails 3.1中要做的另一件事就是注释掉

config.active_record.identity_map = true
Run Code Online (Sandbox Code Playgroud)

config/application.rb.