【问题标题】:Rails auto-reloading plug in development modeRails 开发模式下的自动重载插件
【发布时间】:2010-12-10 16:04:13
【问题描述】:

我正在尝试开发一个插件,每次我更改代码时都会自动重新加载,模拟在 Rail 的开发模式下通常发生的相同的自动重新加载。我的插件主要是一个 ActiveRecord 混合模块。我已经尝试了所有可以在相关 Google 搜索中找到的建议。还没有任何效果。

在我插件的 init.rb 中:

require 'activesupport' unless defined? ActiveSupport
require 'activerecord' unless defined? ActiveRecord

if RAILS_ENV == 'development'
    ActiveSupport::Dependencies.load_once_paths.delete lib_path
    ActiveSupport::Dependencies.load_once_paths.delete File.join(lib_path, 'crowd_compass', 'publisher.rb')

    ActiveSupport::Dependencies.load_paths << lib_path
    ActiveSupport::Dependencies.load_paths << File.join(lib_path, 'crowd_compass', 'publisher.rb')
end

ActiveRecord::Base.send(:include, CrowdCompass::Publisher)

查看 rails 更新日志,我确实注意到了自动重新加载所有插件的功能。

config.reload_plugins = true if RAILS_ENV == 'development'

当我将它添加到我的 conf/environment.rb 时,这并没有像我预期的那样工作

我的插件是结构化的,所以所有文件都由 namespace => 目录自动加载。我这样做是为了避免使用“require”,因为我认为 require 会阻止我的插件自动重新加载。

我一直在通过 rails 控制台在开发模式下完成所有工作,我不知道这是否与通过 mongrel(或类似 web 服务器)运行有什么不同。

插件按预期工作,但每次我对代码进行任何更改时都必须重新加载。有谁知道让插件重新加载的方法吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    控制台绝对不能像杂种一样工作。您使用的所有技术都会在每次请求时重新加载,这类似于每次启动控制台时。

    如果不调用reload!,就无法在控制台中重新加载代码。

    【讨论】:

    • 这就是我所害怕的。我什至会对重新加载感到满意!但这对我来说也没有奏效。相反,每次更改插件中的任何内容时,我都必须完全重新启动控制台。如果解决了这个问题,插件开发会更容易。感谢您的回复。
    • 你试过写测试吗?如果你试驾了你的插件,你就不必重新加载控制台了。
    • @BJ 克拉克。几天前,我切换到只使用 Rspec 测试插件。它的速度要快得多,并且通过为插件设置自动规范,每次我在插件目录中保存任何文件时,看到我的测试运行非常高兴。当我尝试手动测试我的插件时,我不知道自己在想什么。
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多