插件不在开发模式下重新加载

时间:2011-08-16 01:46:31

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-plugins

我写的一个插件有一个奇怪的问题。奇怪的是,我有另外一个打开各种ActiveRecord类的插件,它没有自动重新加载的问题。

在插件init.rb文件中我有

User.class_eval do
  has_one :reputation
  include Karma 
  alias :rep :reputation
end

如果我在生产模式或rails控制台中运行它,则没有问题。当我在开发中运行它时,它会加载一次,但除非我重新启动服务器,否则永远不会再加载它。

我在我正在使用的其他插件(acts_as_readable)中找不到任何特殊内容,它以相同的方式打开用户。


编辑:

我做了:

ActiveRecord::Base.class_eval do
  class << self
    def has_karma_values
      has_one :reputation
      alias :rep :reputation
    end
  end
end
在插件的init.rb文件中

并执行了

class User < ActiveRecord::Base
...
has_karma_values
...
end

并且得到关于has_karma_values不存在的相同错误。此时尚未加载该插件。

令人困惑的是,“可读”行为完全没有问题

User.class_eval do
  has_many :readings
end

ActiveRecord::Base.send :include, ActiveRecord::Acts::Readable

但我的确如此。

这是我完整的init.rb文件

require 'reputation'
require 'karma_name'
require 'karma_tag'
require 'karma_title'
require 'acts_as_karmable'
require 'karma'
require File.expand_path('../lib/generators/karma_generator', __FILE__)

KarmaTitle.setup 'Default'

ActiveRecord::Base.class_eval do
  class << self
    def has_karma_values
      has_one :reputation
      alias :rep :reputation
    end
  end
end

ActiveRecord::Base.send :include, ActiveRecord::Acts::Karmable

以下是错误/home/david/apps/ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.9/lib/active_record/base.rb:1014:in method_missing':未定义的局部变量或方法has_karma_values' for #<Class:0x9ad1b24> (NameError)

2 个答案:

答案 0 :(得分:5)

这应该有效:

# plugin init.rb
Rails.configuration.to_prepare do
  User.class_eval do
    has_one :reputation
    include Karma 
    alias :rep :reputation
  end
end

答案 1 :(得分:3)

init文件加载一次,你不应该从你的插件访问你的模型,反之亦然,你的init文件应该是这样的:

ActiveRecord::Base.class_eval do
  class << self 
    def acts_as_readable
      has_one :reputation
      include Karma
      alias :rep :reputation
    end
  end
end

在你的user.rb文件中你应该这样做:

class User < ActiveRecord::Base
  acts_as_readable
end

这应该可以为您提供所期望的功能。