1

我在安装了 RVM 的两个版本的 Ruby 上运行 Rails 2.3.11 应用程序。两个版本的 Ruby 都有完全相同的 gem,并且每个版本都有完全相同的版本。我卸载了应用程序中不需要的所有 gem。

Ruby 1.8.7 ( RVM 1.8.7) 一切正常。

Ruby 1.9.2 有两个 gemset。RVM 1.9.2有另一个应用程序的 gemset。RVM 1.9.2@this_app有下面列出的宝石。我得到RVM 1.9.2@this_app

Trace/BPT trap: 5

日志只是停止,没有指示错误是什么。是否存在宝石兼容性问题?以下是宝石列表:

actionmailer (2.3.11)
actionpack (2.3.11)
activerecord (2.3.11)
activeresource (2.3.11)
activesupport (2.3.11)
devise (1.0.10)
google4r-checkout (1.0.6.1)
i18n (0.6.0)
json (1.6.1)
liquid (2.2.2)
money (3.7.1)
mysql (2.8.1)
rack (1.1.2)
rails (2.3.11)
rake (0.9.2)
rmagick (2.13.1)
warden (0.10.7)

谢谢你的帮助。

4

3 回答 3

1

这似乎是已安装的 gem 列表,而不是 Gemfile 中的列表。

您如何管理宝石和宝石组?您似乎正在使用捆绑器,这很好,但是您如何在 ruby​​ 和 gemsets 版本之间切换?您使用的是 rvm 还是 rbenv?你有 Gemfile 吗?

如果您不使用捆绑程序,则可以使用 rails 2.3.11 来执行此操作,它只需要一些工作。我强烈推荐这个,这样你就可以更好地管理你的依赖关系。

然后,我会考虑从 , 中删除任何可以Gemfile更新的内容bundle install,然后再次尝试运行。

例如,我认为您cgi_multipart_eof_fix不再需要,这取决于您的部署方式。

其他宝石,如godrubygems-updaterdoc通常不在应用程序中使用,并且可能没有密切关系。

于 2012-10-16T17:14:31.287 回答
1

所以我认为您甚至无法成功启动应用程序ruby ./script/server?它没有启动,然后在第一个请求时崩溃?

当 Ruby 开始崩溃时,首先要看的是您是否使用了任何二进制(不是纯 Ruby)gem。只看上面的列表,我相信json, mysql, 和rmagick可能是二进制的。从您的 Gemfile 中暂时将它们注释掉(如果您必须注释掉部分应用程序代码,请执行此操作)。尝试启动应用程序,bundle exec ruby ./script/server看看它是否崩溃。(我认为jsonRails 可能需要,在这种情况下,您将无法禁用该功能。)

如果您使用纯 Ruby gems,而 Ruby 正在崩溃,那么您很可能在解释器本身中发现了一个错误。这没什么好害怕的。如果我是你,我会卷起袖子,潜入 C 源代码(从 克隆它github.com/ruby/ruby),然后修复它!但是,如果您没有 C 方面的技能,您可能不想尝试它。

如果你想尝试调试解释器,首先要找到它崩溃的点。为此,将启动代码(例如application.rbboot.rb等RVM 保留 Ruby 代码和编辑)。puts "got to #{__FILE__}:#{__LINE__}"puts

一旦找到崩溃的点,您就可以进入 C 源代码并找到任何平台方法的实现或构造崩溃的来源。要获取有关内部发生的更多信息,请添加调试printf调用并使用make && make install. (请注意,来自 C 级别printf的消息似乎与 Ruby 级别的交错顺序不太正确puts。)临时编辑您的 PATH 以便克隆ruby/bin目录中新编译的二进制文件将充当系统ruby

如果你真的能解决问题并为 Ruby 贡献一个补丁,那对你来说意味着一些很好的吹牛的权利!

于 2012-10-16T20:49:51.133 回答
0

不太喜欢回答我自己的问题,但找到了尚未提供的完整答案。

部分问题是 rmagick 兼容性。我在应用程序中注释掉了对 rmagick 的引用,但仍然出现相同的错误。

最大的影响因素是 RVM 安装了 ruby​​gems 1.8.24。rubygems 1.6.x 上的任何内容都不适用于 rails 2.3.x 应用程序。命令“rvm ruby​​gems 1.6.2”安装了兼容的版本。

于 2012-10-17T05:48:50.993 回答