2011-11-22 74 views
2

我试图从Padrino应用程序异步发送电子邮件 - 我试过使用红宝石叉命令,但这并不能很好地扩展我想,我也尝试了delayed_job,但现在有Resque解决方案(主要是因为它附带的Web界面非常好)。通过Resque从帕德里诺异步发送电子邮件

我有它的工作,除了我不得不诉诸使用小马而不是padrino邮件从/ lib发送我的电子邮件。我会很感激任何帮助从图片中删除小马。我遇到的主要问题是我不知道如何从控制器或助手外部调用padrino-mailer。我相信这是可能的,并希望得到任何帮助。如果我们能够理清这一点,我会认为这可能对其他Padrino开发人员非常有用 - 发送电子邮件异步可能是Web应用程序非常普遍的核心可伸缩性要求。

看到这里的信息有关如何安装和配置Resque: https://github.com/defunkt/resque

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


更新 - 我切换使用红宝石邮件gem从/ lib发送电子邮件 - 请参阅已更新模块的更新要点,以便通过resque发送异步电子邮件。

我仍然有兴趣知道padrino-mailer是否可以强制从/ lib下工作 - 对此的帮助仍然值得赞赏。

回答

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 => '[email protected]', :to => '[email protected]', :subject => 'Order changed')