我是Rails的新手,对于如何组织我的代码有一个问题。我读过关于胖模型和瘦控制器的文章,这很有意义(在理论上?)。
我现在想做的是:定期(通过Cron和Rails运行器)从Internet下载一些数据,并将其中的一部分存储在数据库中。我不明白的是在哪里放置代码,这与我从中获取数据的API对话。我是不是把它放到模型中,让它看起来像这样:
API data
    '--> Model --> Database另一种情况是,下载的数据必须拆分并存储在两个不同的模型/数据库表中?选择哪个版本?
版本1:
API data
    '--> Model --> Database
            '--> Model --> Database版本2:
API data
    '--> Controller
            |--> Model --> Database
            '--> Model --> Database感谢您的帮助!:)
发布于 2016-09-02 02:51:03
正如@agmcleod建议的那样,你应该使用raketask,你可以用rake task_name运行它,然后添加cron作业
从以下内容开始:
rails g task api_service fetch_data_for_model1 fetch_data_for_model2
现在打开lib/tasks/api_service.rake
namespace :api_servicedo
  desc "Update database with new Movies"
  task :fetch_data_for_model1=> :environment do
     puts 'start fetching data'
     API.new(credentials).fetch_movies.each do |movie|
        puts "creating movie id =#{movie.id}"
        Movie.find_or_create_by(movie.attributes)
     emd
     puts 'Finisheed!'
  end
  desc "TODO"
  task :fetch_data_for_model2=> :environment do
     ....
  end
end现在打开
crontab -e
并为其提供rake任务路径
00 00 * * * cd /Users/you/projects/myrailsapp && /usr/local/bin/rake RAILS_ENV=production api_service:fetch_data_for_model1您可以考虑使用https://github.com/javan/whenever,它为编写和部署cron作业提供了清晰的语法。
无论何时,您都可以使用这样的定义来创建schedule.rb文件
every 1.day, :at => '4:30 am' do
    rake 'api_service:fetch_data_for_model1'
endhttps://stackoverflow.com/questions/39278578
复制相似问题