我有一些针对我的开发rails服务器运行的iPhone客户端测试。如果我在Rails配置中启用类缓存,整个套件的运行速度会快一个数量级。另一方面,当我没有实际运行测试时,这会减慢开发速度。
我希望测试套件在开始时点击一个动作来打开类缓存,最后再用另一个动作来再次关闭类缓存。
这甚至可能吗?如果是这样,怎么样?
答案 0 :(得分:1)
不是没有一些严重的黑客行为。 Rails会遇到很多麻烦,以确保每次请求都重新加载文件(cache_classes=false
时)。 cache_classes
配置变量的值由初始化程序在几个地方使用,其中最重要的是:
require
时使用true
加载ruby文件(意味着它们不再可重新加载)cache_classes
为false
您可以访问cache_classes
变量的值,如果愿意,您甚至可以更改它:
Rails.configuration.cache_classes = true
但是,这对运行rails实例没有任何影响,因为初始化器使用该值只在rails应用程序启动时运行一次。
这意味着什么,除非你准备投入一些重要的时间和黑客努力,否则你无法真正避免重启你的服务器。因此,您需要了解的是通过测试套件控制此重启过程。
例如,您可以尝试重新启动rails from within rails。这将允许您定义测试套件在开始执行之前可以命中的操作(以正确模式重新启动服务器),以及服务器在所有测试完成后可以执行的另一个操作,以{{设置为以前的设置。您可以通过环境变量like this post suggests来控制缓存类的值。
仍然需要一些工作来设置所有这些并让它挂在一起,但如果你想要一个'自动神奇的'解决方案,这可能是你最好的选择。
答案 1 :(得分:0)
我不认为按照你的建议行事。
但我建议您可能正在寻找错误的解决方案。
如果你想要的是从你的iPhone测试中访问你的开发数据库, 那么为什么不添加一个新的环境。
添加新文件config / environments / 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
您应该有一台服务器,几乎与您的开发服务器相同, 但是在不同的端口上运行,并启用了缓存。