z3c*_*cko 16 ruby ruby-on-rails passenger task
我目前正在编写一个从RSS源中提取新信息的应用程序,并且必须以特定频率更新这些RSS源.目前我只在用户请求提要时才提取,但我想将该行为更改为自动定期提取.
我正在编写一个与数据库交互的shellcript,并通过cron定期启动 - 但这需要大量的双重努力,所以我想知道"Rails Way"或"Ruby Way"是做什么的.我正在使用Ubuntu,Apache和Passenger.你能否提出一些甚至可能包含在应用程序中的更好的方法,这样我就可以轻松地将应用程序部署到另一台机器而无需与cron混合?
Tra*_*vis 19
我建议做一些类似rake任务的事情,并使用whatever gem生成你的cron作业来运行rake任务.
查看http://railscasts.com/episodes/164-cron-in-ruby,了解有关何时宝石的更多信息.
每当gem的主要好处是它可以保持应用程序内的应用程序要求(即应用程序中每隔x小时运行一次cron作业),从而提高应用程序的可移植性.
我建议将上述两者结合使用.即使您已经创建了直接方法,也需要rake任务.这是因为你想在cron中运行的服务器管理员,你可能也想偶尔从命令行运行,这就是rake任务的好处.
每当插件听起来很酷,虽然我不能保证它.当然,知道如何从头做事,然后使用插件让你的生活更轻松是很好的.这是从头开始的方式.
创建一个新文件, lib/tasks/admin.rake
在里面,创建任务本身:
namespace :admin
desc "Updates all RSS feeds"
task :rss => :environment do
RssFeed.update_all
end
end
Run Code Online (Sandbox Code Playgroud)
这假设您有一个RssFeed类,update_all方法可以满足您的期望.您可以从命令行调用它:
rake admin:rss
Run Code Online (Sandbox Code Playgroud)
您可以将此添加到cron(通过调用crontab -lWeb用户)并添加以下行:
10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss
Run Code Online (Sandbox Code Playgroud)