我需要定期执行后台任务从天气网站获取数据。
如何在rails中从远程URL获取json并将其存储在服务器上?此外,将数据存储在数据库中似乎没有任何意义,因此如何在rails中存储可供所有用户使用的变量?
答案 0 :(得分:5)
为什么不将数据存储在缓存中(本地OR memcached)。
检索Feed数据时写入/更新缓存:
def load_feed
Rails.cache.write("feed_data", get_data_from_feed)
end
当您需要访问数据时从缓存中读取:
def read_feed
Rails.cache.fetch("feed_data") { get_data_from_feed }
end
答案 1 :(得分:1)
我只会部分回答你的问题。
如果您想将其存储为可供所有用户使用的变量,那么您可以在my_new_variable.rb
中创建config/initializers
。并且您可以生成一些定义和初始化变量的代码(可能常量更好)。然后是这种方法的一个不好的部分 - 你必须重新启动服务器。如果您使用的是passanger,那么只需touch tmp/restart.txt
即可完成。
您也可以将其存储在yml文件中并在服务器启动时加载它。
即使您以不同的方式存储它,可能最简单的方法是重新启动服务器以加载此新变量。否则,在每个请求中,您应检查是否有可用的新变量(例如检查文件的上次更新时间),或重新加载此文件。
所以,对我而言,最简单的方法是将其存储在数据库中。