0

我有一个小型 Rails 应用程序,它在 Ruby 1.8x 和 Rails 2.x 上运行良好。在一个令人遗憾的决定中,我决定迁移到 Ruby 1.9.x 和 Rails 3,这是一个光荣的痛苦。

我的 Ruby 应用程序使用 MySQL,为此我使用 Active Record。但是,在我使用 Rails (2.x) 之前,我已经编写了一个用于填充数据库的早期 pgm,它现在是完整应用程序的一部分。(我可以在 Rails 之外测试/运行独立的 pgm,没有问题。)

这个独立程序使用 MySQL 和 dbi gems。我从一个模型中调用这个程序:

 system("ruby standalonepgm.rb -args ")

在 Rails 2.0 中,这没有任何问题。在 3.0 中,程序退出时没有任何方法来捕获错误。

在控制台下运行我看到程序死了,因为它找不到 dbi gem!

如果我将 dbi gem 放在 Gemfile 中并进行捆绑日期,那么就会有真正的麻烦。Rails 拒绝启动 - rails 服务器因各种问题而死机。我可以放入屏幕转储,但我认为这并不重要。

似乎有2个问题:

  1. DBI 肯定与 Rails 之神格格不入
  2. Rails 创建了一个沙箱,所有被调用的程序都必须存在于该沙箱中(这就是为什么仅仅一个 require 语句是不够的......它必须在 Gemfile 中)。

它是否可以修复,或者我是被隐藏的铁轨黑魔法咬伤的人之一,而我过去 8 多周的努力是失败的?

4

1 回答 1

1

通过使用 Bundle.with_clean_env do system("ruby pgm.rb" end

我从来没有读过捆绑文档..这个案例在里面有描述..

于 2012-09-17T00:25:57.337 回答