Ruby on rails 需要了解角度和轨道应用的奇怪行为

Ruby on rails 需要了解角度和轨道应用的奇怪行为,ruby-on-rails,angularjs,Ruby On Rails,Angularjs,我正在开发一个应用程序,前端是angular,后端是rails。我刚刚遇到了一个奇怪的问题。我在app.js when('scorecard/currentscore', { templateUrl: 'scorecard/card.html', controller: 'ScorecardController' }) 在scorecard/card.html中,以前的开发人员必须使用日期,因此他将文件名从scorecard/card.html更改为scorecard/card.htm

我正在开发一个应用程序,前端是angular,后端是rails。我刚刚遇到了一个奇怪的问题。我在
app.js

when('scorecard/currentscore', {
  templateUrl: 'scorecard/card.html',
  controller: 'ScorecardController'
})
scorecard/card.html
中,以前的开发人员必须使用日期,因此他将文件名从
scorecard/card.html
更改为
scorecard/card.html.erb
,并使用日期,如
。它不会产生错误,但显示出奇怪的行为

和第一次部署该功能一样,这是在3月份。所以第一次访问该文件是在3月份。所以在浏览器中它显示的是三月。所以现在即使是五月它仍然显示三月。我只是在那个文件中放了一个空格,刷新了浏览器,它开始显示当月。我已经在多个系统上验证了这个问题。在对文件进行简单更改之前,它会一直显示以前访问的日期。我第一次在四月份测试这个。那是三月。我放了一个空格,它开始显示四月。甚至在五月开始的时候,它也在四月继续上演。我又放了一些空格和文字,它显示了梅

类似地,我有一个角度控制器。我需要访问
constants.rb
文件中定义的
ruby常量。我更改了控制器扩展名,并将
.erb
放在
.js.
之后。因此,在我更改该文件之前,它只显示该常量以前访问过的值。这个常量实际上是一个日期数组,应该每天自动更新


有谁能告诉我这是什么行为吗?

我猜
记分卡/card.html
应用程序/assets
中的某个地方,而三月是这个特定文件最后一次编辑的日期

如果是这样的话,问题是您正在从一个资产文件中调用Ruby代码,而该文件并没有在每个请求中编译。这是资产的标准。为了提高效率,Sprockets基于每个文件的内容摘要来缓存每个文件,并且在看到更改之前不会实际计算该文件中的任何代码(或者如果正在运行资产管道,则调用
rake assets:precompile
)。但是,如果要在开发模式下重置链轮缓存,可以运行
rake tmp:clear:cache
或删除
/tmp/cache/assets/Sprockets/development/

长话短说,避免在资产目录中的任何地方使用Ruby代码。它很可能只在
rake assets:precompile
步骤中执行(这也是某些资产gem,如
sass-rails
具有非ruby资产助手方法,如
image-url
等的原因)


这里最好的解决方案可能是使用AJAX请求从服务器获取当前日期,或者在Angle模板中简单地使用stick-to-javascript。

不是ror专家,但正如您所解释的,服务器似乎要求浏览器根据erb模板的内容缓存该模板。我将尝试在您的浏览器中打开dev控制台并查找http
Cache-control
头。如果是这样,则必须配置服务器以避免为此模板发送缓存请求。这确实是一个缓存问题,但它是通过资产管道在服务器端发生的,与浏览器无关。