Ruby on rails 如何修复/调试&x27;期望x.rb定义x.rb';在轨
我已经看到这个问题在许多不同的情况下出现,并且希望获得在StackOverflow上修复/调试它的最佳实践 用一个现实世界的例子来说,我今天早上发生了这样一件事:Ruby on rails 如何修复/调试&x27;期望x.rb定义x.rb';在轨,ruby-on-rails,ruby,Ruby On Rails,Ruby,我已经看到这个问题在许多不同的情况下出现,并且希望获得在StackOverflow上修复/调试它的最佳实践 用一个现实世界的例子来说,我今天早上发生了这样一件事: expected announcement.rb to define Announcement 该类在开发、测试和生产控制台中运行良好,但在生产混血儿中失败。下面是课程: class Announcement < ActiveRecord::Base has_attachment :content_type => '
expected announcement.rb to define Announcement
该类在开发、测试和生产控制台中运行良好,但在生产混血儿中失败。下面是课程:
class Announcement < ActiveRecord::Base
has_attachment :content_type => 'audio/mp3', :storage => :s3
end
课程公告'audio/mp3',:存储=>:s3
结束
我想在回答中解决的问题与其说是解决这个具体问题,不如说是如何正确地调试Rails,让它像预期的那样给您一个有意义的错误x.rb来定义x.rb’通常是一个麻烦
编辑(到目前为止有3个很好的回复,每个回复都带有部分解决方案)
调试:
这是一个棘手的问题 通常对我有效的方法是在生产服务器上运行“脚本/控制台生产”,然后键入:
公告
这通常会给你一个更好的错误消息。但你说你已经尝试过了吗?我以前遇到过这种情况,应该归咎于
AttachmentFu
插件。我相信在我的情况下,这是因为AttachmentFu
希望使用与现有版本不同的图像处理器,或者不受支持的版本也是insta当我显式地将:with=>:rmagick
(或类似的——我使用的是rmagick)添加到has_attachment
方法调用中时,问题就解决了,即使对于非图像附件也是如此。显然,请确保您的生产环境具有所有正确的gem(或将它们冻结到您的应用程序中)和支持软件(ImageMagick)已安装。YMMV
至于不让Rails和AttachmentFu吸收并隐藏真正的错误——我们在完全弄清楚之前就解决了它。您可以尝试禁用所有插件,然后逐个添加它们 在Initalizer部分的
environment.rb
中,添加如下行:
config.plugins = [ :exception_notification, :ssl_requirement, :all ]
从运行应用程序的最小设置开始,逐个添加它们。当我定义了一个恰好映射到现有文件名的模型时,通常会出现此错误。例如,一个请求模型,但Rails已经有一个首先加载的Request.rb。我有一段时间遇到此问题,在我的情况下,总是会出现此错误从该S3错误中删除: (AWS::S3::操作中止)“A 存在冲突的条件操作 目前正在针对这一问题进行调查 资源。请重试。“ 这个问题通常发生在反复创建同一个bucket时。(来源) 这是因为我使用了
attachment\u fu来创建bucket,并且在lib/technoweenie/attachment\u fu/backends/s3\u backends.rb中取消了包含命令bucket.create(@@bucket\u name)
的行(靠近第152行)
一旦注释或删除了命令Bucket.create(@@Bucket\u name)
问题就消失了
我希望这会有所帮助。在我的情况下,我在开发控制台中遇到此错误,但我可以在irb中加载该类。很抱歉,这不是一个确定的答案,但另一种方法可能在某些特定情况下有效:
我在使用Ruby 1.8.7和Merb 1.0.15调试一个站点时遇到了这个问题。这个类(我们称它为SomeClass)似乎不在范围之内,但是当某个_class.rb文件被自动加载时,它需要的其他文件(某些_class/base.rb等)就被删除了未由require机制加载。require中可能存在错误
如果我之前需要某个类文件,例如environment.rb的结尾,它似乎可以防止对象超出范围。由于控制器定义位于一个未命名为控制器的文件中,所以出现了此错误。例如,您有一个注释模型,并且您在Comment.rb文件中定义了控制器,而不是comments_controller.rb既然这仍然是谷歌的头条搜索结果,我想我应该分享一下解决问题的方法:
我在lib文件夹中有一个与我的应用程序名称完全相同的模块。因此,我在模块名称上有冲突,但在文件夹名称上也有冲突(但不确定后者是否真的起作用)
因此,对于OP,请确保应用程序(或Gem列表)中的某个位置没有重复的类或模块名称。使用STI时更改类名会导致以下情况:
- 类别从“Ed受益人”更改为“Ed受益人”
- 现有记录的“ed受益人”存储在“类型”列中,因此当Rails尝试加载它们时,会引发异常
修复:运行迁移以更新“type”列中的值以匹配新的类名。我在rails版本1.2.3中遇到了这个问题。我只能在mongrel中重现这个问题,使用console environment access没有提供任何有用的信息。在我的例子中,我解决了使rails\u ROOT/html折叠的问题
module Foo
class Bar
end
end