【问题标题】:Remove ActiveRecord from Rails 3 application从 Rails 3 应用程序中删除 ActiveRecord
【发布时间】:2012-12-17 21:23:14
【问题描述】:

我已阅读有关此主题的先前主题,但我在那里找到的解决方案并没有解决我的问题。我有一个不进行数据库访问的 rails 3.2.9 应用程序 - 它使用 HTTP Rest 协议到另一个应用程序来访问持久数据。该应用程序在使用 WEBrick 的“rails 服务器”的本地测试环境中运行正常,但无法使用 Nginx/Passenger 运行,并出现错误“* 应用程序中的异常加载错误(请安装 sqlite3 适配器:@987654322 @(sqlite3 不是捆绑包的一部分。将其添加到 Gemfile。))”。从堆栈跟踪看来,ActiveRecord 想要在处理请求之前执行的代码中急切地建立数据库连接。我试图按照说明从我的依赖项中删除 ActiveRecord,但没有成功。我使用 --skip-activerecord 生成,它按预期生成了这样的 application.rb:

require File.expand_path('../boot', __FILE__)

# Pick the frameworks you want:
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"

在我的应用程序中的任何地方都没有对 activerecord 或 active_record 的引用,除了 bundler 创建的 gemlock 文件、cmets 和自述文件中。 Bundler 将 ActiveRecord 报告为依赖项,而“bundle viz”将 rails 本身报告为需要 ActiveRecord 的 gem。任何建议或意见都将受到欢迎。

回答 eric 的问题,这是我的 Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.9'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

【问题讨论】:

  • 你的 gemfile 中有什么?
  • 感谢您的快速响应,埃里克。我更新了问题以添加您要求的信息
  • 你有database.yml吗?这里面是什么?你看到这个答案了吗? stackoverflow.com/a/9139040/376680
  • 感谢您的回复。我没有 database.yml 文件。我确实看到了您引用的答案 - 请注意 user341458 的评论说(s)他仍然将 activerecord 视为依赖项。就我而言,这似乎是我的 nginx/passenger 失败的可能根本原因。顺便说一句,您可以使用以下步骤在没有我的文件的情况下重现我的问题:
  • 顺便说一句,您可以使用以下步骤在没有我的文件的情况下重现我的问题:1)“rails new demo_app --skip-activerecord”2)见证捆绑安装包含 activerecord 3)“rails generate脚手架用户名:字符串电子邮件:字符串” 4)编写一个虚拟类用户,它只在内存中保存用户的哈希值 5)验证它在本地工作 6)验证它与 nginx/passenger 失败

标签: ruby-on-rails activerecord passenger


【解决方案1】:

正如您所发现的那样,Rails 本身在 Gemspec 中将 ActiveRecord 列为依赖项。到目前为止,您存档的设置是从 Rails 中删除 ActiveRecord 的标准方法。如果您真的想更进一步并删除 gem,您很可能必须分叉 Rails gem 并删除它的 Gemspec 中的依赖项。

可能就这么简单,但您也可能会发现 Rails 中有额外的粘合代码来绑定 ActiveRecord,您也必须将其删除。总而言之,我想知道它是否值得。

如果您不需要 ActiveRecord,您已经阻止它有效加载。有些部分可能仍会加载,但大部分不会。内存占用/性能与删除核心 Rails 功能所花费的时间相比,我想知道您是否没有根据自己的需求寻找错误的框架?

如果你的需求太紧以至于 Rails 仍然很重,你可能应该看看 Sinatra 或类似的东西。您也可以坚持使用 Rails 并使用自定义 Rack 中间件堆栈来保留您需要的调用堆栈部分。

我希望这能给你一些指导,如果不是一个可行的解决方案,一些替代方案来解决更高的问题,因为它本身没有理由删除 ActiveRecord gem。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2019-03-25
    相关资源
    最近更新 更多