Ruby On Rails 更新 Heroku 动态路由

2024-04-25

我有一个使用应用程序范围的 slugs 的应用程序(使用懒惰的宝石 https://github.com/RISCfuture/slugalicious与 Sluggable 表),并使用以下代码路由到这些 slugs:

  #Slugs
  begin  
      Slug.all.each do |s|
        begin
          get "#{s.slug}" => "#{s.sluggable_type.downcase.pluralize}#show", :id => s.slug
        rescue
        end
      end
  rescue
  end

目前,当我使用以下代码更新 slugs 模型时,我会更新路线:

after_save :update_routes

def update_routes
    Rails.application.reload_routes!
end

这在开发中完美运行:

我遇到的问题是,如果我更新或创建新的 slug,Heroku 不会更新以适应它。它在开发中工作,并且(令人困惑),如果我在 Heroku 上执行“heroku run rake paths”,它就会工作。但如果我尝试浏览新的 URL,该应用程序只会显示 404。如果我重新部署应用程序,所有路线都可以工作,这让我相信这与更新应用程序范围内的路线有关

这个问题 https://stackoverflow.com/questions/129510/is-it-a-bad-idea-to-reload-routes-dynamically-in-rails说这与在 Heroku 上运行多个进程有关,但我还没有找到这一点。

有任何想法吗?提前谢谢了


修复!

有一种东西叫做“ActiveRecord观察者 http://apidock.com/rails/ActiveRecord/Observer“自Rails 4.0以来已经贬值了。我发现这个网站 http://eveloverails.wordpress.com/2010/10/09/create-multiple-routes-on-ruby/这解释了我想做的事情,但它有点过时了。我在下面包含了 Rails 4.0 的代码:

如果您使用的是 Rails 4,请使用Rails 观察者宝石 https://github.com/rails/rails-observers

将调用添加到您的环境文件中:

#config/application.rb (can be placed into dev or prod files if required)
config.active_record.observers = :slug_observer

添加新的观察者类进入你的模型文件夹:

#app/models/slug_observer.rb
class SlugObserver < ActiveRecord::Observer
  def after_save(slug)
    Rails.application.reload_routes!
    slug.logger.info("Routes Reloaded")
  end

  def after_destroy(slug)
    Rails.application.reload_routes!
    slug.logger.info("Routes Reloaded")
  end
end

其工作方式是在原始函数运行后调用这些附加函数。这使得我的应用程序能够独立于相关模型来操作该功能,从而正确更新路线。

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

Ruby On Rails 更新 Heroku 动态路由 的相关文章

  • Rails 3 中关联的标记装置已损坏

    升级到 Rails 3 后 引用其他标记的装置 用于关系 的装置将停止工作 夹具标签被解释为字符串 而不是查找具有该名称的实际夹具 Example Dog yml sparky name Sparky owner john Person y
  • Rails 4.0 expire_fragment/缓存过期不起作用

    我一直在尝试使用 Rails 的缓存功能 但我无法使某些缓存片段过期 尽管它们似乎已过期 使用 Rails 教程网站中指出的 Russian Doll Caching 我正在使用此配置 我使release controller rb 控制器
  • 您推荐使用哪些工具来分析 Rails 应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找 Rails 的分析工具 我目前正在玩和测试 ruby prof 和 Railsbench 但我对使其工作所需的大量调整和修改
  • 使用 bcrypt-ruby 使用版本 $2y 验证哈希密码

    我们陷入了困境 需要使用 Ruby 根据现有的用户数据库对用户进行身份验证 用户的密码都是使用password compat PHP库生成的 所有散列密码均以 2y 开头 我一直在使用 bcrypt ruby 尝试对用户进行身份验证 但没有
  • 如何让我的导航栏出现在 Rails 应用程序的每个页面上?

    目前 我的导航栏位于我的index htm erb 文件中 目前仅在主页上显示 我想知道为了让导航栏出现在我的应用程序的每一页上 必须采取哪些必要步骤 我的导航栏的代码如下所示
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • 为什么我在安装 Rails 时会出现“写权限”错误?

    当我使用rvm use 1 9 2 我得到 Rails v3 0 0 vikas admin1 DL H61MXEL rvm use 1 9 2 default Using home vikas rvm gems ruby 1 9 2 p3
  • Rails 3 公司帐户具有许多用户,限制对数据的访问

    我想知道在我的应用程序中构建身份验证 授权的最佳方法 我希望有 许多公司帐户 可能使用子域 帐户有很多用户 用户只能访问自己或具有相同帐户的其他用户创建的记录 我所做的研究提供了许多混合搭配的想法 以奇怪而美妙的方式组合 devise ca
  • 如何从应用程序内识别 heroku dyno 编号?

    有没有办法从应用程序中识别 heroku dyno 名称 例如 web 1 web 2 我希望能够生成一个唯一的请求 ID 例如 跟踪网络和工作测功机之间的请求 以统一记录整个请求堆栈 在我看来 测功机标识符将是一个不错的起点 如果这不能做
  • 尽管我安装了 2.2.2,为什么我会收到错误“您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.2.2”

    我正在使用 rbenv 但出现错误Your Ruby version is 2 0 0 but your Gemfile specified 2 2 2当我运行bundle install我的项目中的命令 奇怪的是 我实际上安装了 2 2
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • Rails 资产 - 保留许可证注释

    如何防止 Uglifier 删除某些文件中的某些注释 我希望缩小和压缩代码 但我也希望许可注释保持不变 来自 uglifyJS 的文档 nc or no copyright 默认情况下 uglifyjs 将在生成的代码中保留初始评论标记 假
  • Rails - 使用delayed_job异步发送所有电子邮件

    我在用着延迟作业 https github com collectiveidea delayed job我对此非常满意 尤其是workless https github com lostboy workless扩大 但我想这样设置ALL我的
  • 通过 has_many 进行多个数据库连接

    如何通过使用多个数据库连接来创建 has many 我有一个名为 master 的数据库 其中保存位置信息 这是从单独的应用程序更新的 用户可以访问许多位置 但所有其他模型都位于另一个名为 budget 的数据库中 以下是模型的设置方式 p
  • 重新归档 simple_form 未定义方法 Attachment_field

    I am trying to hook up refile to my view and I am getting the following error 这是我的模型 class Job lt ActiveRecord Base acts
  • RSpec 抛出分段错误

    有时我的测试套件会无缘无故地抛出分段错误 这是输出 Users Test rvm gems ruby 1 9 3 p392 gems activerecord 3 2 9 lib active record relation query m
  • 如何在启动 Rails 控制台时自动运行代码?

    假设每次 Rails 控制台出现时我都想要一个问候语 Scotts MBP 4 ucode scott rails c Loading development environment Rails 4 2 1 Hello there I m
  • Rails - 使链接与 ajax 一起工作

    我有一个链接 应该使用 ajax 加载它旁边的部分内容 而无需重新加载页面 链接在这里 这是链接应该转到的控制器 class ProfilesController lt ApplicationController def profile f
  • Rails 建模:将 HABTM 转换为 has_many :through

    我正在现有的 Rails 站点上进行维护工作 并且遇到了一些由多对多关联引起的问题 看起来该网站最初是使用has and belongs to many对于一些业务逻辑变得更加复杂的关系 所以我需要使用has many through而是支
  • Rails 模型测试 - 模拟与工厂

    Rails 测试模拟对象与使用工厂对象的最佳实践是什么 应该嘲笑only当模型可能转到外部源时使用 或者 您是否仅在测试实际模型并使用模拟来处理其他所有内容时才使用工厂 例如 如果我们有一个包含客户和订单的销售系统 那么当我们测试客户模型时

随机推荐

  • 使用 NHibernate 深复制实体

    我目前正在工作中启动一个新的 ASP NET MVC 项目 我们需要生成项目成本估算 我们使用 NHibernate ASP NET MVC 1 0 和 StructureMap 客户希望能够填写有关项目的所有信息 这些信息位于不同的页面中
  • 如何在 Drupal 7 中打印自定义菜单?

    我在 Drupal 7 中创建了一个菜单 并创建了该菜单下页面的链接 我将新菜单命名为 站点菜单 在我希望菜单出现的 page tpl php 中 我已将其放在适当的位置 清除缓存并刷新页面后 我的菜单不会出现 我很困惑 任何帮助将不胜感激
  • PHPExcel_Style_Fill 无限递归

    我使用图书馆PHPExcel 1 7 9跟 共事Excel文件 首先 我创建一个模板 对其进行样式化和润色 然后 为了避免样式硬编码 使用上述库打开该模板 更改一些值并将其保存为新的 xlsx file 首先 我们从单元格中获取该样式 th
  • TypeScript 类函数不可用

    我正在尝试调用 TypeScript 类的实例方法 在 ASP NET MVC 项目中 但是 在运行时我遇到了类似的异常0x800a01b6 JavaScript runtime error Object doesn t support p
  • 从 CLI 列出 ARM 的 Docker 映像

    我拥有一台 Mac M1 我在上面运行 Docker 在 OSX 上 Docker 可以运行本机 ARM 映像 但也可以模拟 x86 amd64 来运行不是为 ARM 构建的映像 我的问题很简单 从命令行 我试图找到显示图像的命令 dock
  • 用于色彩空间转换的 IMTransform 视频处理器的设置

    我正在尝试使用视频处理器 MFT 进行一些基本的色彩空间转换 我的相机本身支持 NV12 我需要 RGB24 来编写一些着色器 以提供类似卡通的效果 下面是用于执行 MF 的 Media 类的定义 class Media public IM
  • 使用 scikit learn 对通过 networkx 生成的图进行谱聚类

    我有一个 3000x50 特征向量矩阵 我使用以下方法获得了一个相似度矩阵sklearn metrics pairwise distances作为 相似度矩阵 现在我用了networkx使用上一步中生成的相似度矩阵创建一个图G nx fro
  • 使用 Https 连接的 Java 应用程序:“连接被拒绝错误”

    我为我的 JavaAppliaction 创建了一个 jar 从这个应用程序中 我连接到 WebApplicaton 中的 servlet 我将名称和密码从 swing 传递到 servlet 这里我只是在 servlet 中显示名称和密码
  • 如何在多进程内更新 Tkinter 小部件?

    我正在尝试使用进程更新框架 但我无法这样做 如果我不使用进程 框架将使用子元素进行更新 但在使用多进程时则不会 这是我尝试过的 代码是类的一部分 def zx self q print asdadsas lbl Label self myf
  • Scala 相当于 Java 的 static 块吗?

    Scala 相当于 Java 的 static 块吗 伴生对象的构造函数 即主体 中的代码是not与 Java 类的静态初始化块中的代码完全相同 在下面的示例中 我创建了 A 的实例 但未进行初始化 scala gt object Test
  • Laravel 对包含多个项目的集合求和

    我有一个模型SettlementEntries与子表有关系return this gt hasMany App Online entry id 当尝试获取一个条目时 我可以对我的集合进行求和 如下例所示 item SettlementEnt
  • Android 地图 API,异常

    我正在使用谷歌地图 v2 我的代码在方法上被破解 public void onConnected Bundle bundle mLastLocation LocationServices FusedLocationApi getLastLo
  • 将文件上传到 S3 的 upload() 和 putObject() 之间的区别?

    在aws sdk中S3类 有什么区别upload http docs aws amazon com AWSJavaScriptSDK latest AWS S3 html upload property and putObject http
  • 使 CSS url() 相对于文档

    当涉及 CSS 时 适用以下规则 Partial URLs are interpreted relative to the source of the style sheet not relative to the document 但这是
  • 使用 javascript 比较日期[重复]

    这个问题在这里已经有答案了 我在 JavaScript 中有两个日期 var first 2012 11 21 var second 2012 11 03 我想做 if first gt second 在没有外部库的情况下 最好的方法是什么
  • 无法在 Eclipse 4.2 上安装 Aptana 插件

    我已经安装了 Eclipse 4 2 Juno 现在我想安装 aptana 来开发 ruby 但出现以下错误 无法读取存储库http download aptana com studio3 plugin install content ja
  • 获取 `TypeError: jest.fn 不是一个函数`

    我正在尝试使用 Jest 创建以下单元测试 jest dontMock pointsAwardingActions js describe points awarding actions gt describe award points g
  • 获取个人资料的 Facebook 创建日期[重复]

    这个问题在这里已经有答案了 是否可以通过使用 Graph API 获取 Facebook 个人资料的创建日期 时间 我需要它来建立一个身份验证机制 该机制不允许刚刚创建的 Facebook 用户 调用 Facebook API 是一个 相对
  • 找不到主要出口来加载“XYZComponent”

    我在 Net MVC 组件中加载了 ng2 代码 但控制台中显示以下错误 异常 未捕获 承诺 错误 找不到加载 UsersComponent 的主要出口 错误 找不到加载 UsersComponent 的主要出口 知道可能是什么问题吗 我正
  • Ruby On Rails 更新 Heroku 动态路由

    我有一个使用应用程序范围的 slugs 的应用程序 使用懒惰的宝石 https github com RISCfuture slugalicious与 Sluggable 表 并使用以下代码路由到这些 slugs Slugs begin S