我有一个昂贵的(耗时的)外部请求到我需要做的另一个Web服务,我想缓存它.所以我试图通过将以下内容放在应用程序控制器中来使用这个习惯用法:
def get_listings
cache(:get_listings!)
end
def get_listings!
return Hpricot.XML(open(xml_feed))
end
Run Code Online (Sandbox Code Playgroud)
当我get_listings!在我的控制器中调用时,一切都很酷,但是当我调用get_listingsRails时,抱怨没有给出任何阻止.当我查找该方法时,我发现它确实期望一个块,另外看起来该方法仅用于视图?所以我猜测虽然没有说明,但这个例子只是伪代码.
所以我的问题是,如何缓存这样的东西?我尝试了其他各种方法,但无法弄明白.谢谢!
我正在使用Sinatra,我想设置一些Rails具有的便利rake任务,特别是rake db:seed.
我的第一关是这个:
namespace :db do
desc 'Load the seed data from db/seeds.rb'
task :seed do
seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb')
system("racksh < #{seed_file}")
end
end
Run Code Online (Sandbox Code Playgroud)
racksh是一个模仿Rails控制台的宝石.所以我只是将种子文件中的代码直接输入它.它有效,但显然不理想.我想做的是创建一个环境任务,允许命令在Sinanta应用程序/环境下运行,如下所示:
task :environment do
# what goes here?
end
task :seed => :environment do
seed_file = File.join(File.dirname(__FILE__), 'db', 'seeds.rb')
load(seed_file) if File.exist?(seed_file)
end
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何设置环境,以便rake任务可以在其下运行.任何帮助将非常感激.