【发布时间】:2012-09-16 04:55:39
【问题描述】:
我有一个小型 Rails 应用程序,它在 Ruby 1.8x 和 Rails 上运行良好 2.x。在一个令人遗憾的决定中,我决定迁移到 Ruby 1.9.x 和 Rails 3, 这是一种光荣的痛苦。
我的 Ruby 应用程序使用 MySQL,为此我使用 Active Record。 但是,我写了一个较早的 pgm 来填写数据库 在我做 Rails (2.x) 之前,它现在是完整应用程序的一部分。 (我可以在 Rails 之外测试/运行独立的 pgm 并且没有 问题。)
这个独立程序使用 MySQL 和 dbi gems。我从模型中调用这个程序:
system("ruby standalonepgm.rb -args ")
在 Rails 2.0 中,这可以正常工作。 在 3.0 中,程序退出,没有任何方法捕获错误。
在控制台下运行我看到程序死了,因为它找不到 dbi 宝石!
如果我将 dbi gem 放入 Gemfile 并进行捆绑日期,那么就会有 真正的麻烦。 Rails 拒绝启动 - rails 服务器因各种问题而死机。 我可以放入屏幕转储,但我认为这并不重要。
似乎有两个问题:
- DBI 肯定与 Rails 之神格格不入
- Rails 创建了一个沙箱,所有调用的程序都必须存在于该沙箱中 沙箱(这就是为什么仅仅一个 require 语句是不够的......它必须在 Gemfile 中)。
它是否可以修复,或者我是被隐藏的铁轨黑魔法咬伤的人之一,而我过去 8 多周的努力付诸东流?
【问题讨论】:
-
两个后续问题。 1 - 你得到什么错误? 2 - 您是否检查过 dbi 是否与新版本的 Rails 兼容? (顺便说一句,除非您可以确定一切都兼容,否则永远不建议升级到新的语言平台。)
-
使用 Bundle.with_clean_env do system("ruby pgm.rb" end 修复
-
我很高兴你找到了答案,但永远不要认为 Rails 有任何与之相关的魔法。都是普通的老红宝石;魔法只是你懒得理解的代码。
标签: ruby-on-rails ruby gem dbi incompatibility