我升级了Rails应用程序
Rails 4.2
到
Rails 5.0
现在我的很多
delayed jobs
undefined method 'game_completion_feedback' for ConfirmationMailer:Class
即使我在
ConfirmationMailer
类中没有任何更改,也没有在升级时从中调用它。
在做一个
YAML.load_dj
ArgumentError: undefined class/module ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer
from <path>/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/psych/class_loader.rb:53:in `path2class'
Caused by NameError: uninitialized constant
ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer
from <path>/.rvm/gems/ruby-2.2.5/gems/activesupport-5.0.7.1/lib/active_support/inflector/methods.rb:283:in `const_get'
它看起来好像坏了,因为在Rails 4.2升级到Rails 5.0的过程中发生了一些变化。
我在网上发现
Rails.cache.clear
tmp
中的文件夹
production
Rails.cache.clear文件
只是抛出一个错误:
No such file or directory @ dir_initialize - /var/app/current/tmp/cache/
有什么办法可以让这些被耽搁的老工作继续工作吗
轨道5.0
或者我只需要单独重新创建它们?
确认邮件
class ConfirmationMailer < ApplicationMailer
def game_completion_feedback(user, date, feedback)
@user = user
@date = format_time(date.to_time)
@feedback = feedback
mail(to: user.email, subject: 'Game Completed')
end
end
我把这个函数叫做:
def send_feedback_to_client
ConfirmationMailer.delay.game_completion_feedback(user, date, feedback)
end
Struct
例如:
class RemindersForGame < Struct.new(:gamer_email, :leader_email, :start)
def perform
ConfirmationMailer.game_reminder_email_gamer(gamer_email, leader_email, start).deliver_now
ConfirmationMailer.game_reminder_email_leader(gamer_email, leader_email, start).deliver_now
end
end
我称之为
struct
def create_reminder_email(start)
reminders = Delayed::Job.enqueue RemindersForGame.new(client.user, coach, start),
run_at: start - 2.day,
queue: 'game_reminder'
self.reminders_job_id = reminders.id
结束
这个
game_reminder_email_gamer
game_reminder_email_leader
被定义为与该类中的其他方法完全相同的方式,并且我没有更改与如何调用它相关的任何内容。