在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'pggem 'pg'
。 -
在config / application.rb中,replace
require '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上注明)
- 通过Ruby避免AppleScript:rb-appscript或rubyosa?
- 在使用rvm更新ruby版本后收到警告消息“Path set to RVM”
- Ruby on Rails – 对于xxx / xxxx / xxxx,无法将“\ x89”从ASCII-8BIT转换为UTF-8
- 如何find安装Ruby Gem的path(即Gem.lib_path cf Gem.bin_path)
- 如何在redirect时显示Rails Flash通知?
- Ruby是一种function性语言吗?
- 我怎么知道我是从JRuby还是Ruby运行?
- Coffeescript中等效的Ruby .times
- Ruby最大整数