Rails问题在开发模式下重新加载gem和插件

时间:2010-01-14 11:06:29

标签: ruby-on-rails

我正在为原型做一个小型应用程序。我开始使用名为basejumper

的starterapp

快速启动后,我偶然发现了一个非常烦人的问题。在开发模式下,rails在第二次请求后崩溃,即第一次加载页面时,它工作正常,重新加载页面崩溃

"You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.include?"

尝试通过belongs_to关联访问用户对象时发生此问题。在一个视图中,我做了类似的事情,它是使视图崩溃的comment.user.login:

<% @article.comment_threads.each do |comment| %>
  <div class="comment">
     <%=h comment.body %> | Posted <%=time_ago_in_words(comment.created_at)%>ago
        by <%= comment.user.login %>.</div>
<% end%>

我的课程:

class User < ActiveRecord::Base
  acts_as_authentic
  has_many :articles
  has_many :comments

class Comment < ActiveRecord::Base
  acts_as_nested_set :scope => [:commentable_id, :commentable_type] 
  belongs_to :user

class Article < ActiveRecord::Base
  belongs_to :user
  belongs_to :innovation_target
  acts_as_commentable

在我的development.rb配置文件中,我把

config.cache_classes = false

问题消失了,但是我留下了一个服务器,我需要在每次更改后重新启动,这基本上是行不通的。我正在使用rails 2.3.4。

所以我的问题是,我可以以某种方式强迫rails在开发模式下重新加载一些/所有宝石和插件,这样这个问题就消失了吗?或者你看到其他可能性?我使用了许多不同的插件和宝石,包括acts_as_commentable_with_threading,awesome_nested_set和其他。

感谢您的帮助。

PS。我已经查看过像http://www.williambharding.com/blog/rails/automatically-reload-modules-on-change-in-rails/http://nhw.pl/wp/2009/01/07/reloading-your-plugin-in-development-mode这样的文章,但这些文章似乎并非如此(或者我做错了。)

1 个答案:

答案 0 :(得分:1)

经过大量谷歌搜索和检查堆栈跟踪后,我设法解决了这个问题: 在文章http://209.85.129.132/search?q=cache:82jRiVpdYGcJ:www.theirishpenguin.com/2009/01/22/bug-of-the-day-nilinclude-error-with-create_time_zone_conversion_attribute/+create_time_zone_conversion_attribute%3F&cd=1&hl=nl&ct=clnk&gl=be&client=firefox-a中(必须使用谷歌缓存,暂时不加载页面),描述了类似的问题。在评论中,用户stef建议更改configuration.rb文件

config.time_zone = ‘UTC’
to:
config.active_record.default_timezone = :utc

灯塔中实际上有一个记录的轨道问题,描述了这个问题:https://rails.lighthouseapp.com/projects/8994/tickets/1339-arbase-should-not-be-nuking-its-children-just-because-it-lost-interest