通过Resque从Padrino异步发送电子邮件

时间:2011-11-22 02:03:41

标签: redis resque padrino

我正在尝试异步发送Padrino应用程序中的电子邮件 - 我尝试过使用Ruby fork命令,但是我认为这不能很好地扩展,我也试过了delayed_job但现在已经确定了Resque(主要是因为它带来的网络界面非常好看)。

我有它的工作,除了我不得不求助于使用Pony而不是padrino-mailer从/ lib发送我的电子邮件。我很感激任何从图片中删除Pony的帮助。我遇到的主要问题是我不知道如何从控制器或帮助器外部调用padrino邮件程序。我确信这是可能的,并且会感激任何帮助。如果我们能够解决这个问题,我认为这可能对其他Padrino开发人员非常有用 - 发送电子邮件异步可能是Web应用程序非常常见的核心可伸缩性要求。

有关如何安装和配置Resque的信息,请参阅此处: https://github.com/defunkt/resque

然后在这里查看如何通过Resque从Padrino发送电子邮件异步: https://gist.github.com/1384630


更新 - 我转而使用ruby mail gem从/ lib发送电子邮件 - 请参阅更新模块的更新要点,以便通过resque发送异步电子邮件。

我仍然有兴趣知道padrino-mailer是否可以强制进入/ lib工作 - 对此仍然有所帮助。

1 个答案:

答案 0 :(得分:1)

我非常喜欢resque,我将它用于一些更复杂的守护进程,我需要优先考虑队列。

对于cron风格的简单但非常灵活的守护进程,您可以查看:https://github.com/daddye/foreverb

代码非常简单:

#!/usr/bin/env ruby
require 'yaml' # not really necessary but some envs need it...
require 'rubygems' unless defined?(Gem)
require 'forever'
boot = File.expand_path('../../config/boot.rb', __FILE__)

Forever.run :fork => true do
  before :each do
    require boot
    # Here we setup app projects, if you need only once you can do
    # MyApp.setup_application!
    # Which load their dependencies
    Padrino.mounted_apps.each do |app|
      app.app_obj.setup_application!
    end
  end

  every 1.minutes do
    MyQueue.each do |q|
      MyApp.deliver(:notification, q)
      q.destroy
    end
  end
end

将此简单文件放在project_root/lib下,使用chmod +x file_name运行它:

./lib/file_name start|stop|restart

最后,如果您需要在控制器的enqueue中构建它,您可以构建一个简单的简单队列表,如:

MyQueue.create(:from => 'info@godaddy.com', :to => 'buyer@gmail.com', :subject => 'Order changed')