我有一些iPhone客户端测试运行对我的开发轨道服务器。如果我在Rails配置中启用类缓存,则整个套件的运行速度要快一个数量级。另一方面,当我没有真正运行测试时,这会降低开发速度。我可以在Rails 3中以编程方式更改config.cache_classes吗?
我想让测试套件在开始时打开一个动作来打开类缓存,并在结束时再次执行另一个动作以关闭类缓存。
这甚至可能吗?如果是这样,怎么样?
我有一些iPhone客户端测试运行对我的开发轨道服务器。如果我在Rails配置中启用类缓存,则整个套件的运行速度要快一个数量级。另一方面,当我没有真正运行测试时,这会降低开发速度。我可以在Rails 3中以编程方式更改config.cache_classes吗?
我想让测试套件在开始时打开一个动作来打开类缓存,并在结束时再次执行另一个动作以关闭类缓存。
这甚至可能吗?如果是这样,怎么样?
我不认为做你的建议会奏效。
但我建议你可能在寻找错误的解决方案。
如果你想要从你的iphone测试中访问你的开发数据库,那么为什么不添加一个新的环境。
添加新文件的config /环境/ iphone_dev.rb
require File.dirname(__FILE__)+"/development.rb"
config.cache_classes = true
而在你的database.yml(或mongoid.yml或其他)
iphone_dev:
host: localhost
database: my_app_development
没有理由数据库斜面相同
现在只需运行rails server -eiphone_dev -p3001
你应该有一个服务器,几乎相同于您的开发服务器, ,但运行在不同的端口,启用缓存。
不是没有一些严重的黑客行为。 Rails会遇到很多麻烦,以确保您的文件在每次请求时都被重新加载(当cache_classes=false
)时。所述cache_classes
配置变量的值中的几个地方使用由初始化并非最不重要,其存在的:使用require
加载红宝石文件时cache_classes是true
(意味着它们不再重新加载的)
cache_classes
是false
你确实有访问cache_classes
变量的值,如果你喜欢,你甚至可以改变它:
Rails.configuration.cache_classes = true
但是,这会对工作轨实例作为地方则使用该值仅在Rails应用程序启动时运行一次初始化没有影响。
这意味着什么,除非你准备投入一些严肃的时间和黑客的努力,你真的不能避免重启服务器。所以,你需要看的是通过你的测试套件来控制这个重启过程。
例如,您可以尝试重新启动rails from within rails。这将允许你定义一个动作,你的测试套件可以在开始执行之前点击它(以正确的模式重新启动服务器),以及在所有测试完成后服务器可以击中的另一个动作,以便通过设置cache_classes
到以前的样子。您可以通过环境变量like this post suggests来控制缓存类的值。
它仍然需要一些工作来设置所有这一切,并让它们挂在一起,但如果你想要一个“自动 - 神奇”的解决方案,这可能是你最好的选择。
这并不是一个坏主意,有两台服务器并行运行,但它不能解决问题。每当我进行更改时,我仍然需要重新启动这个新的测试服务器。 – ilya
我想你可能不得不决定'更快的请求与恼人的重启'或'更慢的请求自动加载更改' –
是的,这是目前的情况。我只想在某段时间内打开“快速模式”。 – ilya