首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Railtie初始化程序未在插件中运行

Railtie初始化程序未在插件中运行
EN

Stack Overflow用户
提问于 2011-09-15 04:50:58
回答 1查看 1.2K关注 0票数 5

我最近从resources_controller的gem版本切换到了plugin,因为gem版本依赖于git

vendor/plugins/plugin/lib/plugin.rb文件中,Railtie如下所示:

代码语言:javascript
复制
module Ardes
  module ResourcesController
    class Railtie < Rails::Railtie
      initializer 'ardes.resources_controller' do
        ActiveSupport.on_load(:action_controller) do
          extend Ardes::ResourcesController
          include Ardes::ResourcesController::RequestPathIntrospection
        end

        ActiveSupport.on_load(:active_record) do
          include Ardes::ActiveRecord::Saved
        end
      end
    end
  end
end

我已经在我的一个初始化器中添加了一个require 'resources_controller',它可以正确地加载这个文件。问题是,尽管计算了Railtie (类块中的puts将命中),但它似乎从未真正调用初始化器块本身。这当然很重要,因为这是它扩展ActionController以包含resources_controller_for方法的地方。

这个问题似乎已经出现在herehere上了。尽管在这两种情况下,他们都找到了解决问题的其他方法,但没有直接回答为什么没有调用该块。

从我在Rails文档中可以看出,你可以给你的初始化程序块命名任何你喜欢的名称,并且它应该会运行。我认为这无关紧要,但我第一次注意到这个问题是在生产rails s -e production中,尽管我相信在开发模式下也存在同样的问题。

可能发生了什么?

作为参考,完整的插件在这里:https://github.com/ianwhite/resources_controller

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-10 14:13:19

这里的问题是,一旦初始化器进程启动,就不能添加新的初始化器。

在这里,您需要在初始化器过程中注册初始化器的代码。当您在Gemfile中使用gem时,初始化器在以下代码中注册:

代码语言:javascript
复制
if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

此代码在初始化器开始之前执行。相反,您需要初始化程序文件中的resources_controller代码,该文件在初始化过程中运行。因此,注册新的初始化器已经太晚了。

使情况变得复杂的是,vendor/plugins内部的加载路径也是在初始化过程中设置的,因此您无法在application.rb中要求使用resources_controller

对您的问题最简单的解决方案是使用bundler中的:path特性。安装插件后,将这一行添加到Gemfile中:

代码语言:javascript
复制
gem 'resources_controller', :path => "vendor/plugins/resources_controller"

然后,您可以从初始化器中删除require行,bundler将识别出该插件是一个本地签出的gem,并执行如果使用git它会执行的操作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7422818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档