调用expire_fragment会引发“要使用#url_for,您必须显式包含路由助手”错误

2024-04-07

我已经将 Rails 2 应用程序升级到 Rails 3.2.13,并且在尝试启用缓存时遇到问题。缓存在 Rails 2 中有效,我使用的是相同版本的 Ruby - 1.8.7。我不确定它是否相关,但我正在 OSX 上开发。

调用 expire_fragment 时,ActionController::Caching::Fragments 类会引发该错误。 expire_fragment 调用fragment_cache_key,其中包含以下内容:

ActiveSupport::Cache.expand_cache_key(key.is_a?(Hash) ? url_for(key).split("://").last : key, :views)

对 url_for 的调用引发了此错误

2013-07-10T14:40:50.430137+01:00 FATAL   
RuntimeError (In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers):
lib/bio_catalogue/cache_helper.rb:175:in `expire_fragment'
lib/bio_catalogue/cache_helper.rb:181:in `expire_service_index_tag_cloud'
app/observers/annotation_observer.rb:33:in `expire_caches'
app/observers/annotation_observer.rb:12:in `after_create'
app/controllers/annotations_controller.rb:140:in `create_inline'

这是进一步延伸的回溯:

freya.2235    actionpack (3.2.13) lib/abstract_controller/url_for.rb:14:in `_routes'
freya.2235    actionpack (3.2.13) lib/action_dispatch/routing/url_for.rb:148:in `url_=
freya.2235  for'
freya.2235    actionpack (3.2.13) lib/action_controller/caching/fragments.rb:53:in `f=
freya.2235  ragment_cache_key'
freya.2235    actionpack (3.2.13) lib/action_controller/caching/fragments.rb:112:in `=
freya.2235  expire_fragment'
freya.2235    lib/bio_catalogue/cache_helper.rb:175:in `expire_fragment'
freya.2235    lib/bio_catalogue/cache_helper.rb:181:in `expire_service_index_tag_clou=
freya.2235  d'
freya.2235    app/observers/annotation_observer.rb:33:in `expire_caches'
freya.2235    app/observers/annotation_observer.rb:12:in `after_create'
freya.2235    activemodel (3.2.13) lib/active_model/observing.rb:231:in `send'
freya.2235    activemodel (3.2.13) lib/active_model/observing.rb:231:in `update'
freya.2235    activerecord (3.2.13) lib/active_record/observer.rb:114:in `_notify_ann=
freya.2235  otation_observer_for_after_create'

当然,我尝试在调用 expire_fragment 的类中包含 Rails.application.routes.url_helpers 但无济于事,因为错误来自 ActionController 模块内。 ActionController::Base 已经包含了 UrlFor 模块,所以我的问题是: 为什么包含 UrlFor 的模块类会在应该能够正常使用 url_for 的情况下引发错误,要求包含 url_helpers ?


我也遇到了这个错误,但是在我的集成和功能测试中,甚至在使用简单的 link_to 帮助器的视图中。这篇文章让我走上了检查 gem 依赖关系的道路:将 Rails 3.0 升级到 3.1 时路由停止工作 https://stackoverflow.com/questions/14778995/routes-stopped-working-when-upgrading-rails-3-0-to-3-1

我能够通过更改以下内容来解决该问题:

group :development, :test do
  gem 'mocha', '0.10.0', :require => false
  gem 'vcr', '1.11.3'
  gem 'fakeweb', '1.3.0'
  gem 'capistrano', '2.13.5'
  gem 'ruby-debug-ide', '0.4.7'
  gem 'letter_opener', '1.1.0'
end

TO:

group :development, :test do
  gem 'mocha', '~> 0.14', :require => false
  gem 'vcr', '~> 2.5'
  gem 'fakeweb', '1.3.0'
  gem 'capistrano', '~> 2.15'
  gem 'ruby-debug-ide', '0.4.17', :require => false
  gem 'letter_opener', '~> 1.1'
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用expire_fragment会引发“要使用#url_for,您必须显式包含路由助手”错误 的相关文章

  • ruby - heroku:找不到命令

    这个问题已经发布了 但答案还没有起作用 我应该顺便提一下 我对红宝石完全陌生 我在做教程时遇到了错误步骤如下 first app master gem install heroku I get Successfully installed
  • 如何安装wkhtmltopdf?

    现在我正在使用rails 3 0 0 我正在使用Ubuntu 11 10 64位操作系统 我想安装wkhtmltopdf 请告诉我wkhtmltopdf的静态版本 安装中wkhtmltopdf 在 Ubuntu Linux 机器上 首先使用
  • 在测试环境中设置default_url_options似乎不起作用

    我已将以下代码放入我的config environments test rb file config action mailer default url options host gt localhost 3000 但是当我运行测试时 所有
  • 将 Sprockets 的“depend_on”指令指向非资产文件

    我有一个app assets javascripts moufa js erb填充来自 a 的值的文件config moufa yml文件 我想使用depend onsprockets 指令 以便每次 yaml 文件发生更改时 它都会重新编
  • Capistrano 杀死资产:预编译

    我正在尝试部署我的应用程序 但我不断收到 err xxx xxx xx xxx bash line 1 9953 Killed bundle exec rake RAILS ENV production RAILS GROUPS asset
  • Rails 3 - 如何完全避免数据库?

    我尝试在没有任何数据库后端的情况下使用 Rails 3 但当我尝试访问页面时它仍然坚持要求 sqlite3 gem 并抛出错误no such file to load sqlite3 尽管应用程序中没有代码需要 sqlite 但我将 dat
  • 即使 Braintree 中出现错误, result.credit_card_verification 也会返回 nil

    我正在使用 Braintree 进行付款处理 并且我正在尝试获取处理器响应代码 https www braintreepayments com docs ruby reference processor responses来自 Braint
  • Rails 日志太详细

    如何防止 Rails 记录过多日志 这是我的 production log 文件中的典型跟踪 许多部分 缓存命中 它在开发中很有用 但我不希望在我的生产环境中使用它 Started GET redirected true for 46 19
  • 销毁/删除 Rails 中的数据库

    是否可以从现有应用程序中完全删除数据库和所有迁移记录等 以便我可以从头开始重新设计数据库 通过发行rake T您有以下数据库任务 rake db create Create the database from DATABASE URL or
  • capistrano deploy.rb 中的 require 找不到文件

    我有一个 Rails 3 0 5 应用程序 我正在设置 capistrano 来使用配方 在我的配置目录中 我有一个名为 database capistrano rb 的文件 在我的deploy rb中 也在配置目录中 我有以下行 就在开头
  • 如何从模型调用辅助方法?

    我使用 MongoDB 作为我的 Rails 应用程序中的数据库和 MongoID gem 我想从模型中调用辅助方法after create回调方法 这怎么可能 我的模型代码是 class Department include Applic
  • 渲染:带参数的动作

    我有一个有 2 种方法的类 第一个方法由视图使用一些 GET 参数 params page 调用 我想保存这些参数并通过渲染操作将它们发送到我的第二个方法 class exemple def first sql save of params
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • 在 Heroku 上托管的 Rails3 中强制使用“www”,无需 .htaccess

    我想知道是否有 Rack 替代方案来强制 URL 中包含 www 因为 Heroku 不使用 htaccess 文件 也许甚至是在路线中做到这一点的好方法 Thanks 在您的 ApplicationController 中 您可以简单地创
  • 为什么 RackMultipart* 文件保留在我的 Rails /tmp 目录中?

    我正在使用 Paperclip 2 3 来处理在 Ubuntu 上运行的 Rails 3 0 3 应用程序上的图像上传 Paperclip 正在按广告处理上传 但在应用程序的 tmp 文件夹中创建的 RackMultipart 文件仍然存在
  • 在 Rails 3 中渲染 Markdown 文本

    我想将 markdown 转换为 html 在我看来我有markdown some text variable 但我得到了错误undefined method markdown I added require BlueCoth 到envir
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • Rails 选择帮助程序中的 :include_blank 和 :prompt 有什么区别?

    在 Rails 文档中 http api rubyonrails org classes ActionView Helpers FormOptionsHelper html label Options 前两个列出的选项select帮手是 i
  • 如何在实际作业中引用活动的delayed_job

    我正在研究一个解决方案来显示延迟作业的完成百分比 使用delayed job gem 目前 我的delayed jobs 表的数据库迁移如下所示 class CreateDelayedJobs lt ActiveRecord Migrati
  • 更改 en.yml 文件中的属性名称不起作用

    我更改了 ruby on Rails 项目中 en yml 文件中的属性名称 按钮工作正常 但字段属性并没有改变 这是我的模型 class Enr AffordableWarmth lt ActiveRecord Base self tab

随机推荐

  • 将 >100K 页面链接在一起而不会受到 SEO 惩罚

    我正在创建一个网站 该网站将审查互联网上数十万个其他网站的隐私政策 它的最初内容是基于我的运行普通爬行 http commoncrawl org 50 亿页网络转储和分析所有隐私政策 https stackoverflow com ques
  • 如何使用 Retrofit 和 RxJava/RxAndroid 处理响应错误?

    我无法弄清楚如何使用改造和 RxAndroid 处理响应错误 如果存在网络错误等 则会调用 onError 但我需要能够获取响应以检查是否存在身份验证错误 相反 我得到的是一个带有空字符串的令牌 但我找不到原因 解决这个问题的最佳方法是什么
  • 如何修复滚动

    我在将工具提示定位在表内的数据列上时遇到一些问题 该表本身位于垂直滚动 div 内 为您提供一点背景 由于我无法控制的遗留问题 我正在开发的页面必须通过固定宽度和高度的 iframe 来显示 我需要显示的数据大约有12列 需要全部显示 一列
  • Django - 为什么syncdb不尊重数据库路由器?

    我已经设置了一个数据库路由器 使用以下命令将不同的应用程序和不同的模型定向到不同的数据库db for read and db for write路由器方法 这非常有效 除了 manage py syncdb不尊重这些路由器设置 When I
  • 作为 JS 的相对初学者 我正在努力尝试找到解决方案 我需要找出无序列表的哪一行被单击 ul li Line 1 li li Line 2 li li Line 3 li ul 我真的不想为每一行添加 onclick 事件 我确信一定有办法
  • 在 Android 中将图像添加到画布

    今天是个好日子 我希望您能帮助我理解如何在视图上实现的 OnTouchEvent 上将图像添加到画布中的概念 到目前为止 这就是我想出的 parent是在此自定义视图中实例化并添加到的活动 Override protected void o
  • mongodb 将 $lte 与 $indexOfArray 一起使用

    与模型的集合 stack mean 3 5 如何查询平均值小于 4 38 的堆栈数组索引 db stacks aggregate project index indexOfArray stack mean lte 4 38 我收到此错误 o
  • “@+id”是什么意思?

    我已经阅读了大部分 Android 文档 但还没有找到任何声明来说明 id 值前缀 id 的含义 我知道 string 及其变体的含义 但不知道 的变体 除了给我答案之外 你能告诉我 Android 文档中记录的位置吗 加号仅表示如果 ID
  • 为什么coq互感类型必须具有相同的参数?

    下列的亚瑟的建议 https stackoverflow com a 17304209 403875 我改变了我的Fixpoint相互关系Inductive这种关系 建立 游戏之间的不同比较 而不是 深入研究 但现在我收到一条全新的错误消息
  • 客户端 XSLT 的当前状态

    我上次听说 暴雪是少数几家将客户端 XSLT 付诸实践的公司之一 2008 年 2011年还是这样 还是现在有更多人在生产中探索这种技术 现代浏览器 IE9 FF4 Chrome 和客户端处理能力似乎已准备好利用此标准 在大规模属性上切实节
  • 为什么有人使用 UTF-8 以外的编码? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道为什么开发人员需要使用 UTF 8 以外的编码 维基百科列出了 UTF 8 与各种其他编码相比的优点和缺点 http en wikipe
  • UIACollectionView 单元格与visibleCells

    我正在尝试使用 xcode 4 5 中的自动化编写测试脚本 我有一个UICollectionView我想单击一些当前不可见的单元格 根据文档 http developer apple com library ios documentatio
  • 通过 $.ajax 调用返回附件

    我的页面上有一个 iframe 在该 iframe 内我执行代码 ajax url SamplePage ExportToExcel async false data par type POST 响应返回正常 但是我没有收到 保存附件 对话
  • Powershell 替代 Unix who 命令显示 ssh 会话

    我在 Windows 服务器上 想知道谁通过 ssh 进入了服务器 在 Linux 上 以下命令有效 who s Windows 10 上的替代方案是什么 使用提升的 PowerShell 您可以通过以下方式列出所有登录用户 Get Cim
  • Grizzly,共享 spring 生成的上下文

    我有一个独立的 spring 项目 我需要用它启动一个嵌入式休息服务 我可以用 grizzly 启动服务器 我的问题是 当我启动 grizzly 服务器时 它会创建自己的应用程序上下文 因此我的父应用程序创建的实例无法通过 REST 服务访
  • type=”number” 的 html 标签输入和基于文化的小数点分隔符

    当我打开具有另一种文化和用户界面 即瑞典 的网站时 我需要的是在英语浏览器中查看正确的小数分隔符 怎么存档呢
  • 在 Kotlin 中实现 Java 接口

    我有一个Java界面 public interface NonHindiQuery void onNonHindiQueryReceived String Query 我想实施它Kotlin class class MainActivity
  • _ptr 或 _var - 哪一个用作类字段,为什么?

    我有一堂课 class Impl1 public POA I1 private Impl2 var ob public Impl2 ptr get return ob void set Impl2 ptr ob this gt ob ob
  • 如何将按钮添加到 InAppSettingsKit 设置视图 (iPhone/iPad)?

    我一直在查看 InAppSettingsKit 提供的示例应用程序 我注意到使用了几个按钮 我想在我的应用程序中集成一个名为 重置 的红色按钮 但我不知道该怎么做 我查看了示例应用程序中的代码 但我对这一切有点迷失 请问有人可以帮我吗 在花
  • 调用expire_fragment会引发“要使用#url_for,您必须显式包含路由助手”错误

    我已经将 Rails 2 应用程序升级到 Rails 3 2 13 并且在尝试启用缓存时遇到问题 缓存在 Rails 2 中有效 我使用的是相同版本的 Ruby 1 8 7 我不确定它是否相关 但我正在 OSX 上开发 调用 expire