hol*_*den 2 ruby memcached caching currency ruby-on-rails
我发现了 Money gem 的这个附加组件,它从 ECB 欧洲中央银行更新(每 24 小时更新一次汇率),但我不确定应该如何在使用多种货币的 Rails 应用程序中进行缓存。
http://github.com/RubyMoney/eu_central_bank
eu_bank ||= EuCentralBank.new
eu_bank.update_rates
#Rails.cache.fetch('rates', :expires_in => 24.hours) { eu_bank.update_rates }
rate = eu_bank.exchange_with(Money.new(100, session[:currency]), "USD").to_f
Run Code Online (Sandbox Code Playgroud)
它有一个功能可以将费率写入某个文件......但我也不确定这就是我想要的。我还使用具有只读文件系统的heroku。
eu_bank.save_rates("/some/file/location/exchange_rates.xml")
Run Code Online (Sandbox Code Playgroud)
我也找不到任何方法来检查该物体的年龄。我只是想知道每 24 小时加载一次并持续用于我的整个 Rails 应用程序的最佳选择。有什么指点吗?
这可以通过使用 Rails 低级缓存和 before_filter 来完成:
class ApplicationController < ActionController::Base
before_filter :set_conversion_rates
def set_conversion_rates
rates = Rails.cache.fetch "money:eu_central_bank_rates", expires_in: 24.hours do
Money.default_bank.save_rates_to_s
end
Money.default_bank.update_rates_from_s rates
end
end
Run Code Online (Sandbox Code Playgroud)
此代码将每 24 小时下载一次汇率,并将结果保存到缓存(无论您使用什么缓存模块),银行对象会在每次请求时从其中加载它们。