rails中使用delayed_job在后台异步执行程序时使用另外的数据库当队列

delayed_job可以讲比较耗时的任务在后台运行,比如发送邮件,下载,修改图片等等

github上有介绍,我们这里使用collectiveidea的

https://github.com/collectiveidea/delayed_job

而且他支持我们多种数据库作为队列。ActiveRecord ,DataMapper,IronMQ,Mongoid,MongoMapper,MongoMapper ,Redis
这里直接试用ActiveRecord。 

直接在Gemfile里添加

gem 'delayed_job_active_record'
然后bundle install就好。

delayed_job需要一个表来当作队列,直接运行下面的代码就能创建好

rails generate delayed_job:active_record
rake db:migrate

但是有很多项目有很多数据库的,而且是不用database.yml的,还有的情况就是需要将这个队列另外单独使用一个数据库。这种情况只需要先在需要的数据库里创建所需的表,然后讲相关配置写入一个Helper中,使用delayed_job前加入下面这一行代码即可。

ActiveRecord::Base.establish_connection ModelHelper.get_delayed_job_db_conf

这样生成的队列就会保存在相应的表中

对应的 在config/initializers/delayed_job_config.rb中也需要加入以下代码

ActiveRecord::Base.establish_connection ModelHelper.get_delayed_job_db_conf
这样启动work后才会找到相应的队列

这样就可以正常使用delayed_job了,具体的方法看github吧

你可能感兴趣的:(rails中使用delayed_job在后台异步执行程序时使用另外的数据库当队列)