在开发模式下,在每次请求时重新加载文件后,如何挂钩 Rails?

2024-05-19

我正在研究一个gem https://github.com/bradrobertson/apartment设置 ActiveRecord 模型的属性(例如table_name)基于用户配置选项动态。

我有一个初始化程序可以实现这一点。然而我的问题是,在开发模式下,这些类会重新加载,因此它们不会维护这些值集。

所以我想我应该使用 Railtie 来连接这些文件重新加载的点并在模型上再次运行我的配置。然而我的问题是config.to_prepare在 Railtie 中似乎在之前运行reload!实际上发生了。我可以通过一些日志记录来证明这一点:

module MyMod
  class Railtie < Rails::Railtie

    config.to_prepare do
      Rails.logger.debug("Contact object_id: #{Contact.object_id}")
    end
  end
end

如果我加载控制台,我会得到第一个日志:

Contact object_id: 2202692040

如果我检查Contact.object_id它匹配:

Contact.object_id  #=> 2202692040

Then I reload!

reload!

我的 Rails 记录器to_prepare logs:

Contact object_id: 2202692040

所以它仍然具有旧的 object_id,但是当我在控制台中检查它时:

Contact.object_id  #=> 2197355080

这是新加载的类对象id。

那么我怎样才能得到to_prepare to run after文件被重新加载?使用Rails 3.0.10

update

我还尝试手动将此操作附加到after_prepare回调ActionDispatch::Callbacks像这样:

initializer "apartment.init" do
  ActionDispatch::Callbacks.set_callback(:prepare, :after) do
    Rails.logger.debug("Contact object_id: #{Contact.object_id}")
  end
end

它确实在之后运行回调config.to_prepare但它似乎仍然发生before文件被重新加载...我得到与上面相同的行为。


编写一个初始化程序,如果cache_classes is false, uses ActionDispatch::Reloader http://api.rubyonrails.org/classes/ActionDispatch/Reloader.html设置一个to_prepare运行 gem 安装例程的回调。

initializer 'foobar.install' do
  if Rails.configuration.cache_classes
    FooBar.install!
  else
    ActionDispatch::Reloader.to_prepare do
      FooBar.install!
    end
  end
end

它可以在控制台中使用reload!方法并在Rack应用服务器中。

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

在开发模式下,在每次请求时重新加载文件后,如何挂钩 Rails? 的相关文章

  • 如何将对象从 rake 任务传递给 Rabl 视图

    我正在尝试使用 rabl 从 rake 任务创建 json 文件 下面我有一个简化版本来测试 当我通过 url 查看 articles json 或 articles 2 json 时 我得到了预期的 json 响应 但是当我尝试通过 ra
  • 当父对象更新时,活动记录 update_attribute 对对象(父对象)的关联对象(子对象)执行 DELETE 查询

    轨道 3 0 11 红宝石 1 9 3 当我更新父对象时 为什么活动记录 update attribute 对对象 父对象 的关联对象 子对象 执行 DELETE 查询 以下是我的课程 class User lt ActiveRecord
  • Rails - 使用 %W

    我有以下效果很好的 def steps w hello billing confirmation end steps first 但我想这样做 def step title w Upload a photo Billing Info Con
  • 如何在 Rails 3 项目中包含 SSL 证书

    我开发了一个 Rails 3 项目 它使用thin作为服务器 与 Devise 和 Doorkeeper 一起进行身份验证 我想在我的项目中添加 SSL 证书 我看过一些描述如何在 Rails 3 项目中使用 SSL 证书的帖子 但没有一个
  • 如何在 Rails 模型中获取 request.uri?

    request request 当我在控制器中写这个时 它就会起作用 但是如果我在模型或应用程序控制器中需要这个变量 我该怎么办 模型存在于 Web 请求的上下文之外 您可以在 irb 中实例化它们 可以在延迟作业或脚本等中实例化它们 如果
  • 如何停止 Heroku 服务器?

    我有一个托管在 heroku 上的临时服务器 我只想将其关闭 但不想破坏该应用程序 我该怎么做 我是否有类似 heroku stop 之类的命令 例如 heroku restart 来重新启动 OR 有没有办法让服务器在超过 750 小时免
  • Ruby:邮件 gem 在邮件中的 60 个字符后添加 \r\n

    我要移植Actionmailer x509 https github com petRUShka actionmailer x509到 Rails 3 为了做到这一点 我尝试从带有签名电子邮件的大字符串创建 Mail 对象 您可以在这一行看
  • Rails 轮胎 Elasticsearch 奇怪的错误

    我已经索引了Car拥有一辆车记录的车型mercedes benz在数据库中 如果我搜索这个词benz我收到错误 ActiveRecord RecordNotFound in CarsController index Couldn t fin
  • Rails:控制文件存储缓存大小

    Rails 中基于文件的缓存的文档说 请注意 缓存将不断增长 直到磁盘已满 除非您 定期清除旧条目 不幸的是 它没有提供任何有关如何定期清除旧条目的信息 是否设置合适的值 expires in完成这项工作还是清除缓存背后还有其他某种黑魔法
  • 设计对多个并发会话的支持

    我使用 Rails 3 2 11 和 Devise 2 2 3 作为订阅服务应用程序 我从另一位不再可用的开发人员那里继承了该应用程序 我是 Rails 和 Devise 的新手 我想要允许单个用户 电子邮件 拥有多个会话到同一个应用程序
  • 使用 DataMapper 而不是 ActiveRecord [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Ruby on Rails 3:“超类与类不匹配......”

    平台 Mac OSX 10 6 在我的终端中 我使用 rails c 启动 Ruby 控制台 按照 Ruby on Rails 3 教程构建一个类 class Word lt String def palindrome check if a
  • Rails 3、mysql/mysql2 将某些检索到的字符串误解为 ASCII-8BIT

    这个问题最初是常见的 字符编码不兼容 ASCII 8BIT 和 UTF 8 问题 但事实是not我在问什么 相反 我发现发生此问题是因为数据库的某些字段在检索时被标记为 ASCII 8BIT 而大多数字段正确显示为 UTF 8 例如 在包含
  • Rails 路由:仅具有自定义操作的资源

    我有一个NotificationsController 其中我只有动作clear 我想通过执行 POST notifications clear 来访问此操作 所以我在我的路由器中写了这个 resources notifications o
  • 如何在 Rails 3 中强制对 HTML 电子邮件进行字符编码?

    我正在使用 Rails 3 1 3 1 1 RC1 并且我已配置 ActionMailer 以使用windows 1252作为默认编码 外部要求 这与纯文本邮件完美配合 但一旦我发送 HTML 邮件 文本就会转换为UTF 8再次导致乱码文本
  • 资产管道中的路由助手

    使用 Rails 3 1 0 rc4 我尝试访问 javascript 文件中的路由助手 本例中为 event js erb 但似乎此时它们尚未加载 当请求合并的 assets application js 文件时 我得到 throw Er
  • 设计不能很好地处理 RoR3 应用程序上的多个子域

    我看到了很多关于这个主题的问题 但其中很多都有相互矛盾的信息 并且由于某种原因它对我不起作用 I have 顶级域名 即 lvh me 开发 每个用户都有子域 即 userdomain lvh me 登录表单位于顶级域 lvh me I w
  • Rails - 动态构建深度嵌套对象(Cocoon /nested_form)

    我目前有一个具有深层嵌套的复杂形式 并且我正在使用Cocoon https github com nathanvda cocoongem 根据需要动态添加部分 例如 如果用户想要在销售表单中添加另一辆车 代码如下所示 div class a
  • Ruby on Rails content_for 会自动进行 HTML 转义吗?

    使用 Rails 3 0 6 我发现在视图中 如果我执行 content for food name Macaroni Cheese 然后当我使用它回来时content for food name 那么 将被制作成 amp 已经 如果我做一
  • 自定义变形在rails3上不起作用?

    我正在使用 Rails 3 0 1 并在initializers inflections rb 中有以下代码 ActiveSupport Inflector inflections do inflect inflect irregular

随机推荐