Rails::Railtie:创建 Rails 3 gem 时遇到问题

2024-04-20

我真的可以用另一双眼睛来看待这个问题,所以我想我会把它发布在这里。 不久前,我出于自己的教育目的编写了一个基本的 ActiveRecord 扩展。我最近一直在阅读有关 Railties 的内容,并想尝试让它与 Rails 3 一起工作。我想我会将其打包为 gem,以了解该过程。 如果我跳过 Railtie 并在初始化程序文件夹中将其作为传统的 Monkeypatch 执行此操作,则效果很好。使用 Railtie...没什么。

从表面上看,我的 Railtie 从未被执行过,因此似乎没有发生其他事情。

有人看到这里有什么问题吗?

也欢迎任何有关最佳实践或改进的建议。

项目宝石文件:

gem 'sql_explain', :path => "/home/mike/projects/sql_explain/"

gemspec:

...
  spec.files = %w(README.rdoc sql_explain.rb lib/sql_explain.rb lib/railtie.rb sql_explain.gemspec)
...

sql_explain.rb

require 'lib/railtie.rb'

Railtie.rb

require 'active_record'
require 'sql_explain'

module SqlExplain
  class Railtie < Rails::Railtie
    railtie_name :sql_explain
    initializer 'sql_explain.extend.activerecord' do
      if defined?(ActiveRecord)
        ActiveRecord::ConnectionAdapters::MysqlAdapter.include SqlExplain::AR
      end
    end
  end
end

sql_explain.rb

module SqlExplain
  module AR
    def self.included(base_klass)
      base_klass.send :alias_method_chain, :select, :explain
    end


    def select_with_explain(sql, name = nil)
      @connection.query_with_result = true
      result = execute('explain ' + sql, :skip_logging)
      rows = []
      result.each_hash { |row| rows << row }
      result.free
      @connection.more_results && @connection.next_result    # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped
      exp_string = ""
      rows.each{|row| row.each_pair{|k,v| exp_string += " #{k}: #{v} |"}}
      log(exp_string, "Explanation") {}
      select_without_explain(sql, name)
    end
  end
end

看起来您已经解决了这个问题,但请记住,使用 Rails 3 您可以执行以下操作:

ActiveSupport.on_load :active_record do
  ActiveRecord::ConnectionAdapters::MysqlAdapter.include SqlExplain::AR
end

这将确保您的包含仅在 ActiveRecord 加载后才会被触发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails::Railtie:创建 Rails 3 gem 时遇到问题 的相关文章

  • Rails 应用程序助手不支持中文字符

    def top cateogries with home category id 1 concat raw
  • after_save 回调将 Updated_by 列设置为 current_user

    我想使用 after save 回调将 Updated by 列设置为 current user 但 current user 在模型中不可用 我该怎么做 您需要在控制器中处理它 首先对模型执行保存 如果成功则更新记录字段 Example
  • 如何在 ActiveAdmin 中正确配置 Rails 4.1 枚举

    我有一个 Rails 4 1 应用程序 其中使用枚举来表示对象的隐私级别 在我的架构中 t integer privacy level default 0 在我的模型中 enum privacy level privacy private
  • Zurb Foundation 5,modernizr 未找到

    我在生产模式下使用 Foundation 5 0 2 0 时遇到此问题 在 Rails Unicorn NginX 和 Ubuntu 上 NetworkError 404 Not Found http mydomain com javasc
  • 保护客户端 API 的安全

    我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库 其中必须确保两个非常重要的功能的安全 用户每次游玩都必须扣款 我们必须确保提交的分数是玩家实际获得的分数 解决第一个问题看起来很简单 在每次游戏开始时 我们都会调用
  • ruby - 数组元素之间的排列

    我正在使用 ruby 在 Google Sketchup 中编写一个插件 在尝试排列数组中存在的两个数组时遇到了一个真正的问题 所有这些都取决于用户组合 我有一个数组数组 例如 1 lol so 当我们有这样的组合 1 2 3 没关系 它应
  • ruby on Rails 中的自动测试错误

    我运行了命令自动测试 这是我得到的错误 我正在关注 Hartl 的书 想知道这种冲突是否会发生 因为 Rails 现在附带了 ZenTest 还是其他东西 我怎样才能克服这个错误 我是 RoR 新手 Invalid gemspec in U
  • Rails 渲染不必要的信息

    我一直在使用 RoR 和 Bootstrap 我试图将我的代码渲染成我在网上找到的片段 基本上我的索引中有这个 div class col md 6 div class well well sm div class row p p p p
  • 在 selenium webdriver 中使用 phantomjs 代理

    我正在尝试在 selenium webdriver 2 25 的 ruby 1 8 7 脚本中使用 PhantomJS 1 9 1 配置代理 我看到了一些使用 Firefox 的例子 我用这个浏览器成功地做到了 我使用了这段代码 profi
  • 在 sorbet 中,你能指定一个类型是一个类的后代吗?

    我有一个方法返回一个对象 该对象可能是许多不同类型的对象之一 但它们都是同一祖先类的一部分 精确的对象类型是动态推断的 但是 我对签名中返回值的内容感到困惑 我在下面使用了一个占位符instance of来说明问题 sig params i
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • ruby 1.9 如何将数组转换为不带括号的字符串

    我的问题是关于如何在 ruby 1 9 中将数组元素转换为字符串而不需要括号和引号 我有一个数组 数据库提取 我想用它来创建定期报告 myArray Apple Pear Banana 2 15 12 在 ruby 1 8 中我有以下行 r
  • 从 Restful 身份验证迁移到 Devise

    许多 Rails 2 3 应用程序正在使用 Restful Authentication 但该插件似乎与 Rails 3 存在一些问题 在升级到 Rails 3 时 我一直在使用 Devise 有什么办法可以顺利地从 Restful Aut
  • debugger-ruby_core_source gem 没有提供 ruby​​-2.0.0-p451 的源代码

    我在其他 SO 问题中看到了非常类似的问题 例如debugger ruby core source gem 没有提供 ruby 1 9 2 p321 的源代码 https stackoverflow com questions 204618
  • 如何在 Rails Active Admin 中添加 Colorpicker?

    我想实现这个http www eyecon ro colorpicker about http www eyecon ro colorpicker about或活动管理表单之一中的任何其他颜色选择器 任何帮助表示赞赏 谢谢 GS 因为你想使
  • Rails 5 api - 未定义的方法“user_url”

    我在 API 模式下使用 Rails 5 启动了一个新项目 目前我只是创建项目 设置数据库并使用脚手架命令 rails g scaffold User 我用邮递员尝试我的代码来创建一个新用户 POST Request URI localho
  • Rails 形式的当前日期

    我正在学习 Rails 并在书外进行一些探索 并随着知识的增长创建一个具有附加功能的简单应用程序 我正在编写一个简单的博客应用程序 我在表单中添加了一个名为 日期 的字段 我不希望这是一个字段 我希望它从服务器获取日期并将其自动放入数据库中
  • 如何使用 Fabrication 定义特质

    我正在学习如何使用制造 http www fabricationgem org getting started in Rails我们决定更换所有factory girl代码与制造 假设我们有这段代码factory girl FactoryG
  • Rails:使用 RestClient 的外部 API 集成(未定义的局部变量或方法“user”)

    我正在建设一个数字图书馆 我已经完成了很多需要的功能 我目前在将数字图书馆与学习管理系统 LMS 集成时遇到问题 我已经有一个数字图书馆的管理员身份验证系统 使用设计宝石 我的目标是允许想要访问数字图书馆的用户使用其学习管理系统 LMS 凭
  • gem install libv8 --version '3.11.8.17' on ruby​​ (windows)

    问题如下 Error installing libv8 ERROR Failed to build gem native extension D Ruby193 bin ruby exe extconf rb creating Makefi

随机推荐

  • 检查输入是否在 C++ 的限制范围内

    我需要创建多个函数来检查输入是否有效 这是我的一些代码 bool IsValidRange signed char s bool isValid true if s gt SCHAR MIN s lt SCHAR MAX isValid f
  • 在单个 Activity 中的 Fragment 之间切换

    我想创建一个Activity它显示了用户可以浏览的一种菜单 通过单击一个项目 将显示一个新屏幕 为用户提供更多选项 类似于向导 我想使用这个来实现Fragments 但这对我不起作用 现在我有 main xml
  • 如何从Flash/AS3找到用户Temp文件夹的路径?

    如何从 Flash AS3 找到用户临时文件夹的路径 例如 C Users lisnil AppData Local Temp 它需要在任何版本的 Windows 上运行 至少是 XP Vista 和 7 您无法通过 Flash 那样访问文
  • F#:将字符串选项转换为字符串的最短方法

    目标是转换一个string option这是通过一些很好的类型计算得出的一个简单的string然后可以传递到 UI printf URL 其他只想要一个字符串并且对选项类型一无所知的东西 None应该变成空字符串 显而易见的方法是做一个ma
  • 标签 朋友 照片

    我使用此代码 但出现错误 致命错误 未捕获 OAuthException 121 第 1106 行 home a283357 public html app base facebook php 中抛出无效照片 ID 我的代码用于标签 dat
  • 单击菜单按钮后,如何在启动新活动之前显示插页式广告?

    我使用选项菜单按钮转到第二个活动 当用户单击该菜单按钮时 启动第二个活动后会显示插页式广告 但我想在启动第二个活动之前显示插页式广告 当用户单击插页式广告的关闭按钮时 第二个活动应该启动 我正在使用下面的代码来显示插页式广告 case R
  • 在 MySQL 8 中使用点数据类型和 st_distance_sphere 查找最近的地点

    我有一张桌子叫place id name coordinates longitude latitude 1 London 0 12574 51 50853 2 Manchester 2 25 53 41667 3 Glasgow 4 25
  • Python:在同一窗口中绘制多个图

    我正在尝试运用我从中学到的东西绘制多个图但具有偏移范围python https stackoverflow com questions 16534551 plotting multiple plots but whith offset ra
  • Android 设备上的 JavaPos?

    我正在寻找从 Android 设备打印到 Epson POS 打印机的解决方案 并且需要任何类型的帮助 那么我认为 JavaPOS 在这种情况下是正确的解决方案吗 我找到了这个例子JavaPOS Java 中的 Hello World ht
  • 在 Linux 计算机上安装 Visual Studio [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 请告诉我如何安装Visual Studio任何版本linux Like UBUNTU 11 0 你需要使用Mono http www mono pro
  • 刷新幻灯片

    我使用的是来自http www slidesjs com http www slidesjs com 我想刷新图像列表 因为我需要动态添加和删除图像 有什么办法可以做到这一点吗 我尝试使用删除 fn pluginName 但没有成功 Tha
  • 着色器/矩阵问题 - 看不到对象

    我试图在屏幕上放置一个立方体并点亮它 我想要在立方体上添加 phong 阴影 当我运行代码时 我可以看到背景图像 但看不到立方体 我相当确定立方体本身是正确的 因为我已经设法用纯色着色器显示它 我已经设法编译着色器程序 但我根本看不到立方体
  • 保存哈夫曼代码时出现问题?

    我想将霍夫曼代码保存到文件中 我怎样才能做到这一点 我将霍夫曼代码保存到字符串中 但生成的文件的大小比原始文件大 一种非常简单的方法是一次写一点 如下所示 unsigned char acc Accumulator of bit waiti
  • 添加按键侦听器并使用 Javascript 单击 Greasemonkey 中的链接

    我想创建一个greasemonkey 脚本 它将在一个邮件站点中添加用于注销操作的快捷键 当前注销链接 注销 hl en 其中有一个id r5 我能够获取链接的节点 但无法调用单击它 我尝试了如下脚本 function key event
  • 我如何找到字符串中多个子字符串的位置(Python 3.4.3 shell)

    以下代码显示 word 在字符串中出现一次的位置 我如何更改我的代码 以便如果 单词 在字符串中出现多次 它将打印所有位置 string input Please input a sentence word input Please inp
  • 使用 Firebase SDK v3 中的数据库密钥进行身份验证?

    首先 我喜欢新的 Firebase 但是 我无法让我的 Swift 项目连接到 Firebase 因为我使用数据库机密来验证设备 在 Firebase SDK 版本 3 之前 我可以使用 Firebase 密钥 现在是数据库密钥 进行身份验
  • 汉诺塔递归算法

    我在理解这个河内塔递归算法时遇到问题 public class MainClass public static void main String args int nDisks 3 doTowers nDisks A B C public
  • 辅助功能:仅限 sr 或 aria-label

    From MDN https developer mozilla org en US docs Web Accessibility ARIA ARIA Techniques Using the aria label attribute 在下
  • Laravel phpunit 异常处理

    我正在使用 Laravel 5 5 和 Vue js 编写一个 Web 应用程序 PHPUnit 版本是 6 3 1 当用户使用表单请求注册时 我正在测试验证错误 Route web php Route post register Auth
  • Rails::Railtie:创建 Rails 3 gem 时遇到问题

    我真的可以用另一双眼睛来看待这个问题 所以我想我会把它发布在这里 不久前 我出于自己的教育目的编写了一个基本的 ActiveRecord 扩展 我最近一直在阅读有关 Railties 的内容 并想尝试让它与 Rails 3 一起工作 我想我