在Rails 3中删除ActiveRecord

现在Rails 3testing版已经出来了,我想我应该看看重写一个我刚刚开始在Rails 3testing版中工作的应用程序,以便获得它的感觉并获得一点启动。 该应用程序使用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。 我需要这样做的原因是因为加载不需要的东西不仅是愚蠢的,而且是因为即使在我尝试为控制器运行一个生成器时也无法build立数据库连接。 这是因为我已经抹掉了database.yml并用MongoDB的连接细节replace了它,以便使用这个要点来使用MongoDB连接细节的database.yml。 不知道为什么它需要能够发起一个数据库连接,只是为了生成一个控制器无论如何….

有谁知道正确的Rails 3这样做?

我从阅读源代码开始,所以让我知道它是否真的有效。 🙂

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

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

  • 检查你的config/application.rb 没有 require "active_record/railtie" 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"

Rails 4

我正在寻找如何禁用它在轨道4,只发现这个答案,不再在轨道4的作品。所以这就是你如何能在轨道4(在RC1testing)。

在一个新的项目

 rails new YourProject --skip-active-record 

在现有的项目中

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

    需要“action_controller / railtie”
    需要“action_mailer / railtie”
    要求“链轮/ railtie”
    需要“rails / test_unit / railtie”
    
  • 在config / environments / development.rb中,移除或注释掉config.active_record.migration_error = :page_load

  • 可能你必须从spec_helper中去掉active_record助手(通过注释中的VenoM)

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

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

对于新的rails应用程序,可以通过指定–skip-active-record参数来排除活动logging。 例如:

 rails new appname --skip-active-record 

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

 config.active_record.mass_assignment_sanitizer = :strict 

 config.active_record.auto_explain_threshold_in_seconds = 0.5 

在你的development.rb文件中。

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

 config.active_record.identity_map = true 

config/application.rb

如果您正在运行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 

另外注释掉

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

(在导轨3.2.13上注明)