Ruby on rails 删除Rails 3中的ActiveRecord
既然Rails 3 beta版已经推出,我想我应该看看如何重写一个我刚刚开始在Rails 3 beta版中开发的应用程序,这样既能让我感觉到它的存在,又能让我领先一步。该应用程序对其所有型号使用MongoDB和MongoMapper,因此不需要ActiveRecord。在以前的版本中,我以以下方式卸载activerecord:Ruby on rails 删除Rails 3中的ActiveRecord,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,既然Rails 3 beta版已经推出,我想我应该看看如何重写一个我刚刚开始在Rails 3 beta版中开发的应用程序,这样既能让我感觉到它的存在,又能让我领先一步。该应用程序对其所有型号使用MongoDB和MongoMapper,因此不需要ActiveRecord。在以前的版本中,我以以下方式卸载activerecord: config.frameworks -= [ :active_record ] # inside environment.rb 在最新版本中,这不起作用-它只是抛
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的线索。我需要这样做的原因不仅是因为加载我不想要的东西很愚蠢,但它抱怨它无法建立DB连接,即使我尝试运行控制器的生成器。这是因为我已经擦除了database.yml,并将其替换为MongoDB的连接详细信息,以便将database.yml用于MongoDB连接详细信息。不知道为什么它需要能够启动一个DB连接,只是为了生成一个控制器
有人知道Rails 3的正确方法吗?我通过阅读源代码来了解这一点,所以请告诉我它是否真的有效。:) 生成应用程序模板的
rails
命令现在有一个选项-O
,告诉它跳过ActiveRecord
如果您不想重新运行rails
,您应该在现有应用程序中检查以下内容:
- 检查您的
是否具有config/application.rb
或要求的“rails/all”
。相反,对于没有ActiveRecord的标准Rails设置,它应该只有以下要求:要求的“active\u record/railtie”
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\u record
,但当完全忽略nil
时,这应该是默认值g.orm
- 可选,但在
中,删除为数据库加载模块的gem文件
行。例如,这可能是行gem
gem“mysql”
- 以上所有内容都是正确的。在rails 3.1中,我还需要做的一件事是注释掉
config.active_record.identity_map = true
在新rails应用程序的
config/application.rb
中,您可以通过指定--skip active record参数使其排除活动记录。例如:
rails new appname --skip-active-record
如果您使用Rails 3.2生成了一个新项目,您还需要注释掉:
config.active_record.mass_assignment_sanitizer = :strict
及
在您的development.rb文件中。也注释
# config/application.rb
config.active_record.whitelist_attributes = true
(在rails 3.2.13中有说明)如果您正在运行rspec,还需要删除(在spec\u帮助程序中): 移除
# 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
Rails 4 我一直在寻找如何在Rails4中禁用它,但只找到了这个在Rails4中不再有效的答案。这就是在rails 4(在RC1中测试)中实现的方法 在新项目中
rails new YourProject --skip-active-record
在现有项目中
rails new YourProject --skip-active-record
- 在gem文件中,删除数据库驱动程序gem,例如
或gem'sqlite3'
gem'pg'
- 在config/application.rb中,将
替换为 require "action_controller/railtie" require "action_mailer/railtie" require "sprockets/railtie" require "rails/test_unit/railtie" 需要“控制器/轨道连接的操作” 要求采取“行动”\u邮递员/railtie 需要“链轮/系杆” 需要“轨道/测试单元/钢轨接头”require'rails/all'
- 在config/environments/development.rb中,删除或注释掉
config.active\u record.migration\u error=:page\u load
- 您可能需要从spec_helper中删除活动的_record helper(通过注释中的VenoM)
- 您可能必须删除ConnectionManagement中间件(unicorn似乎就是这样):
(via)config.app\u middleware.delete“ActiveRecord::ConnectionAdapters::ConnectionManagement”
我希望这能帮助其他人寻找如何在Rails 4中禁用ActiveRecord。。似乎-O选项也可以作为“--skip-activerecord”调用。我使用此选项为另一个(临时)应用程序运行了rails命令,它生成了一个新的应用程序模板,与您上面所写的完全匹配。所以我可以把这些更改复制粘贴到我的实际应用程序上。谢谢-很好的发现:)很好-谢谢你的-跳过activerecord。这正是我所需要的。除了运行rails generate(我仍然在那里看到ActiveRecord的东西)时,这在大多数情况下都有效。如何删除它?在rails 3.1中,您还需要在
应用程序.rb
文件中包含require“sprockets/railtie”
。只需对这个答案和我之前的评论添加一个快速更新。。。在Rails 3.1中,它现在是——跳过活动记录。注意额外的破折号。我这样做了,并运行了一些差异来查找和删除我当前使用ActiveRecord的应用程序中的内容。谢谢!仍然需要从spec_帮助程序中删除活动的_记录帮助程序(不是强制性的,但如果您正在运行spec)。请参阅Rimian的最后评论。帮助了我,谢谢!根据下面的注释,在application.rb和/或environments/{env}.rb文件中可能有其他配置声明要注释掉。YMMV.activerecord仍保留在gemfile.lock中。。。“我们能做点什么反对它吗?”博蒂不太可能。这是rails的一部分。要从.lock中删除它,我想您必须删除对rails的依赖,并依赖于所有单独的组件。查看gemspec中的依赖项列表——除了activerecord之外,您可能还需要依赖其他任何东西。在进行此更改后,我似乎遇到了与i18n相关的问题:lib/active_support/i18n.rb:13:in`':未初始化常量i18n(NameError)。有什么想法吗?
require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"