5

我已阅读有关此主题的先前主题,但我在那里找到的解决方案并没有解决我的问题。我有一个不进行数据库访问的 rails 3.2.9 应用程序 - 它使用 HTTP Rest 协议连接到另一个应用程序来访问持久数据。该应用程序在使用 WEBrick 的“rails 服务器”的本地测试环境中运行正常,但无法使用 Nginx/Passenger 运行,并出现错误“ * Exception LoadError in application(请安装 sqlite3 适配器:gem install activerecord-sqlite3-adapter(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"

除了在 bundler 创建的 gemlock 文件、注释和自述文件中之外,我的应用程序中的任何地方都没有对 activerecord 或 active_record 的引用。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'
4

1 回答 1

2

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

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

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

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

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

于 2013-01-09T09:37:46.900 回答