2

我正在尝试从 Padrino 应用程序异步发送电子邮件 - 我尝试使用 Ruby fork 命令,但我认为它的扩展性不是很好,我也尝试了延迟作业,但现在已经选择了 Resque(主要是因为它的 Web 界面自带超级好看)。

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

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

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


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

我仍然很想知道是否可以强制 padrino-mailer 从 /lib 工作 - 对此的帮助仍然很感激。

4

1 回答 1

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')
于 2011-11-22T10:17:11.327 回答