gpt4 book ai didi

ruby-on-rails - 延迟作业 : How to solve the problem "Job failed to load"?

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:47 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3.1.0 和 DelayedJob。网络上有很多人收到“Job failed to load: uninitialized constant Syck::Syck”错误,但我想我至少发现了产生错误的原因(在我的例子中)。我有一个如下所示的 ActiveModel:

class Contact
include ActiveModel::Conversion
include ActiveModel::Validations
include ActiveModel::Dirty
extend ActiveModel::Naming
extend ActiveModel::Translation

attr_accessor :full_name, :email, :subject, :message

def initialize(attributes = {})
attributes.keys.each do |attr|
instance_variable_set "@" + attr.to_s, attributes[attr.to_sym]
end
end

validates_presence_of :full_name, :email, :subject, :message

def persist
@persisted = true
end

def persisted?
false
end
end

相关的 Controller Action 是:

def contact
@contact = Contact.new(params[:contact])

if @contact.valid?
::Contact::Mailer.delay.contact(@contact)

respond_to do |format|
format.html { redirect_to root_path }
end
else
respond_to do |format|
format.html { render :action => :contact }
end
end
end

我注意到我的问题与“著名”\“臭名昭著”Job failed to load: uninitialized constant Syck::Syck仅当我运行 @contact.valid? 时才会发生。如果我像这样重新实现上述 Controller 操作:

def contact
@contact = Contact.new(params[:contact])

::Contact::Mailer.delay.contact(@contact)

respond_to do |format|
format.html { redirect_to root_path }
end
end

所有工作都按预期进行:我没有收到错误消息并且电子邮件已成功发送。 简而言之,当我运行 @contact.valid?在 Controller 操作中(我也可以在不使用 if ... else 语句的情况下运行它)它生成 Job failed to load错误。我真的不明白这种与 DelayedJob gem 和 valid? 有关的奇怪行为方法。

为什么会这样?我该如何解决这个问题?


更多信息 DelayedJob: “Job failed to load: uninitialized constant Syck::Syck”


更新

如果我调试 @contact.errors在这两种情况中使用或不使用 @contact.valid?方法...

...当我使用 @contact.valid?方法(DelayedJob 不起作用)我得到

#<ActiveModel::Errors:0x00000101759408 @base=#<Contact:0x000001017597f0 @full_name="Sample name", @email="foo@bar.com", @subject="Sample subject", @message="Sample message content.", @validation_context=nil, @errors=#<ActiveModel::Errors:0x00000101759408 ...>>, @messages={}>

...当使用@contact.valid?方法(DelayedJob 有效)我得到

#<ActiveModel::Errors:0x00000101759408 @base=#<Contact:0x000001017597f0 @full_name="Sample name", @email="foo@bar.com", @subject="Sample subject", @message="Sample message content.", @errors=#<ActiveModel::Errors:0x00000101759408 ...>>, @messages={}>

请注意,在第二种情况下 @validation_context=nil不存在,并且在这两种情况下都有一个“嵌套”<ActiveModel::Errors:0x0000010175940 ...>声明。 这是错误吗?

最佳答案

我找到了适合我的解决方案。您可以重新定义 'Object#to_yaml_properties' Contact 类中的方法只包含您需要的属性。从而排除“错误”变量。

def to_yaml_properties
['@full_name', '@email', '@subject', '@message']
end

希望这对您有所帮助。

关于ruby-on-rails - 延迟作业 : How to solve the problem "Job failed to load"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com