标签: resque

通过Resque发送Devise电子邮件

我正在尝试通过Resque发送Devise电子邮件.

通过Resque发送普通电子邮件就好了.并且Devise电子邮件发送得很好,但不会通过Resque发送电子邮件.我得到"找不到有效的映射",这意味着我的帮助程序覆盖不会被拾取.

我正在关注这个http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/

奇怪的是,调试它我正在使用Devise的本地副本,并在Devise中的'initialize_from_record'中添加断点,当我仅使用Devise时会受到攻击.但是当我通过resque发送Devise电子邮件时,断点不会受到影响:

class ResqueMailer < Devise::Mailer
  include Resque::Mailer
end

config.mailer = "ResqueMailer"
Run Code Online (Sandbox Code Playgroud)

而resque则显示一个打包的gem路径,而不是我的本地源,例如:

/Users/mm/.rvm/gems/ruby-1.9.2-p290@evergreen/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail'
Run Code Online (Sandbox Code Playgroud)

知道为什么它不使用我的本地宝石源和/或如何让Resque发送我的Devise电子邮件?

ruby-on-rails resque devise

12
推荐指数
2
解决办法
3043
查看次数

如何让resque-web在Heroku上工作?

在我的开发机器上,我可以输入resque-web一个控制台,它会在我的浏览器上启动一个显示Resque界面的新选项卡.

在Heroku,Cedar堆栈上,我怎么能做同样的事情?即我想看看Resque的界面为我的Heroku应用程序.

编辑

config/initializers/resque.rb

require 'resque'
require 'resque/server'

uri = URI.parse(APP_CONFIG['redis_to_go_url'])
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)

# Load all jobs at /app/jobs
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
Run Code Online (Sandbox Code Playgroud)

routes.rb

mount Resque::Server.new, :at => '/resque'
Run Code Online (Sandbox Code Playgroud)

一切正常.我现在能够看到Resque Web界面.但是,我想保护这一点不受公众的欢迎.可能使用用户名和密码.如何才能做到这一点?

heroku resque ruby-on-rails-3

11
推荐指数
1
解决办法
2777
查看次数

如何在rails应用程序中调试resque作业

如何在rails应用程序中调试resque作业?我只想在self.perform函数的日志文件中写一些信息.我写过这个

system("echo sos >> /home/maruf/Desktop/log.txt")

在self.perform()中.但什么都没发生.什么是正确的方法?

ruby ruby-on-rails resque

11
推荐指数
1
解决办法
6930
查看次数

从Heroku上的Resque :: TermException或SIGTERM中彻底恢复

当我们重新启动或部署我们得到的失败队列数Resque工作与任一Resque::TermException (SIGTERM)Resque::DirtyExit.

我们TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10在Procfile中使用new ,所以我们的工作线看起来像:

worker:  TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake environment resque:work QUEUE=critical,high,low
Run Code Online (Sandbox Code Playgroud)

我们也在使用resque-retry我认为可能会自动重试这两个例外情况?但它似乎不是.

所以我猜两个问题:

  1. 我们可以Resque::TermException在每个工作中手动救援,并使用它来重新安排工作.但对于所有工作,是否有一种干净的方法可以做到这一点?即使是猴子补丁.
  2. 不应该resque-retry自动重试这些?你能想出为什么不会这样的原因吗?

谢谢!

编辑:在不到10秒的时间内完成所有工作,这似乎是不合理的.在运行Resque :: DirtyExit异常时,似乎需要有一种方法来自动重新排队这些作业.

heroku resque resque-retry

11
推荐指数
3
解决办法
4799
查看次数

让Rails 2.3.x忽略i18n gem

我有一个Rails 2.3.5项目,它使用Rails的本地化功能.我也碰巧安装了Rails 3 beta(这取决于i18n gem).Rails 2.3.5很乐意自己处理本地化(没有安装i18n),但是如果i18n gem可用,它就会使用它.

最近我升级了我的宝石,现在安装了0.3.7和0.4.0的i18n.当然,Rails想要加载和使用导致我的项目出错的最新版本.我尝试将gem版本设置为0.3.7,这可以解决Web应用程序中的错误.但是,我们使用resque和resque_mailer来延迟发送消息.当工作人员从队列中获取邮件程序作业时,它会忽略environment.rb中的config.gem要求并使用版本0.4.0.

理想情况下,我想告诉Rails根本不使用i18n gem.我怎么做?

更新:从beta 4开始,Rails 3现在需要i18​​n版本0.4.1.我不知道有多少人没有遇到这个问题,因为现在看来如果安装了Rails 2和Rails 3,你就会遇到这个问题.

ruby ruby-on-rails internationalization resque

10
推荐指数
1
解决办法
3701
查看次数

Resque工作者使用PostgreSQL服务器失败

我已经成功设置了我的工作人员,他们曾经没有问题(在开发中)执行,但现在他们不在生产或开发中(我猜测从SQlite3更改为PostgreSQL之后).

当我运行rake命令来运行worker时,rake resque:work QUEUE=*我得到以下错误和堆栈跟踪:

getaddrinfo: nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)

heroku rake resque:work QUEUE=*在控制台中运行时,我会遇到以下错误,以测试队列中的待处理工作程序.

Class         SentimentJob
Arguments     [4, 5, 6]
Exception     ActiveRecord::StatementInvalid
Error         PGError: server closed the connection unexpectedly This probably means
              the server terminated abnormally before or while processing the request.
              : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc,
              a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid =
              d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"taggings"'::regclass
              AND a.attnum > 0 AND NOT a.attisdropped …
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails heroku resque redis

10
推荐指数
1
解决办法
3480
查看次数

GitHub的Redis和Resque失败行为?

任何人都可以了解GitHub在使用Resque时如何处理Redis服务器的潜在故障或暂时不可用?

还有其他一些似乎已经将半复杂的解决方案放在一起作为使用zookeeper的redis-cluster的保留(请参阅https://github.com/ryanlecompte/redis_failover解决方案for resque failover redis).其他人似乎有"糟糕的故障转移",在第一次看到连接问题时将奴隶切换到主设备而没有redis客户端之间的协调(但这在临时不可用情况下似乎有问题).

问题:Defunkt曾经谈过GitHub如何处理Redis失败?是否存在不涉及zookeeper的故障转移的最佳实践?

关于resis的原始帖子说明Redis的选择理性的一部分是redis的主从功能,但该帖没有描述GitHub如何利用这一点,因为所有工作者都需要对Redis的读写访问权限(参见https: //github.com/blog/542-introducing-resque).

github resque redis

10
推荐指数
1
解决办法
960
查看次数

在更新数据库提交后运行rails代码,没有after_commit

我正在尝试与我的后台任务经理对抗一些种族案件.基本上,我有一个Thing对象(已经存在)并为其分配一些属性,然后保存它.使用新属性保存后,我将其排入Resque,并传入ID.

thing = Thing.find(1)
puts thing.foo # outputs "old value"
thing.foo = "new value"
thing.save
ThingProcessor.queue_job(thing.id)
Run Code Online (Sandbox Code Playgroud)

后台作业将使用从数据库加载对象Thing.find(thing_id).

问题是我们发现Resque在获取作业和Thing从ID 加载对象方面非常快,它加载了一个陈旧的对象.因此,在工作中,调用thing.foo仍将返回"旧值",如1/100次(不是真实数据,但不会经常发生).

我们知道这是一个竞争案例,因为rails将thing.save 在数据实际提交到数据库之前返回(在本例中为postgresql).

Rails中有一种方法只能在数据库操作提交后执行代码吗?基本上我想确保在Resque加载对象时,它会获得最新鲜的对象.我知道这可以使用模型after_commit上的钩子来实现Thing,但我不希望它在那里.我只需要在这个特定的上下文中发生这种情况,而不是每次模型都提交更改为DB时.

postgresql ruby-on-rails resque ruby-on-rails-3

10
推荐指数
1
解决办法
2112
查看次数

Resque作业,如何停止运行作业

我的Resque工人班

class WebWorker

  @queue = :jobs_queue

  def self.perform(id)
  //bunch of code here
  end
end
Run Code Online (Sandbox Code Playgroud)

我从队列中删除了这样的某个工作

Resque.dequeue(WebWorker,id)
Run Code Online (Sandbox Code Playgroud)

但是我想停止运行并重新启动,我该怎么做?

ruby-on-rails delayed-job resque

10
推荐指数
1
解决办法
5679
查看次数

在后台运行rake任务与使用像Delayed Job,Resque或Sidekiq这样的gem之间的区别是什么?

我需要实现一些后台处理来1)发送电子邮件,2)做一些API调用.而且,无论我使用什么系统,我还将与某种cron调度程序(只要有可能)结合使用.我很好奇,我认识到有一系列非常酷的背景处理宝石(延迟工作,Sidekiq,Resque),但我也明白你可以根据Ryan Bate的视频只用rake任务进行后台处理:http:// railcasts.com/episodes/127-rake-in-background.

使用gem和rake任务进行后台处理的利弊是什么?后者关于我的一件事是,每次调用rake任务时你都必须启动一个新的环境,这在内存上非常昂贵.

请注意,我不需要比较宝石.这个系列在这里做得很好:http: //www.sitepoint.com/series/comparing-ruby-background-processing-libraries/

rake background-process delayed-job resque sidekiq

10
推荐指数
1
解决办法
2037
查看次数