DateTime.now.strftime('Y%m%d%H%M%S') Rails 中的正确字符串格式
DateTime.now.strftime('Y%m%d%H%M%S') proper string format in Rails
我正在尝试为 Rails 中的预订建立参考编号。我正在使用
DateTime.now.strftime('Y%m%d%H%M%S')
用于参考编号并连接一些字符串。我使用 Sidekiq 作为后台作业执行此操作,但后来对结果感到困惑,因为它在 strftime
.
中给出了不同的值
def to_reserve
venue = Venue.find(params[:id])
venue_name = venue.name.delete(' ')
reference_number = ReferencesNumberWorker.perform_in(5.seconds, venue_name)
................
end
Sidekiq:
class ReferencesNumberWorker
include Sidekiq::Worker
def perform(venue_name)
reference_number = DateTime.now.strftime('Y%m%d%H%M%S')
return venue_name + reference_number
end
end
这是示例结果:
HotelMatt67fb02cb5da7871f92347df9
没想到结果是对的。
这是将 Sidekiq 作业的哈希值附加到您希望它附加 Sidekiq 结果的 return 的参考号。
基本上就是这个方法
def to_reserve
venue = Venue.find(params[:id])
venue_name = venue.name.delete(' ')
reference_number = ReferencesNumberWorker.perform_in(5.seconds, venue_name) <- This line will return Sidekiq job number, not the actual result from Sidekiq perform operation.
................
end
当您定义参考号时,您假设它会为您提供 Sidekiq return,但事实并非如此。这是后台作业的基本点。您正在将 Sidekiq 作业与您正在做的事情断开连接,即卸载到一个单独的进程。所以你不能期望 return,你正在将方法卸载到 Sidekiq。 Sidekiq 的 return 基本上就是职位编号。
如果你想让它工作,那么将你正在做的参考号计算移到 Sidekiq 的 to_reserve
方法中,或者如果它必须在 Sidekiq 中完成,则将所有逻辑从 to_reserve
到 Sidekiq 的 perform
方法。
另请注意,要使用 Sidekiq,您应该将对象的 ID 传递(给 Sidekiq),以便您可以在 Sidekiq 中重新查找它并对对象执行一些 idempotent 操作。在我看来,我认为在这种情况下您不需要使用 Sidekiq。它不必要的复杂性,但对每个人来说都是自己的。
旁注:优先使用时间 class(Time#now
对比 DateTime#now
)而不是 DateTime 来计算 strftime
方法。它是一种纯粹的 Ruby 方法,比 DateTime class(已知的性能瓶颈)更快。此外,您的代码不会硬依赖 Rails。
我正在尝试为 Rails 中的预订建立参考编号。我正在使用
DateTime.now.strftime('Y%m%d%H%M%S')
用于参考编号并连接一些字符串。我使用 Sidekiq 作为后台作业执行此操作,但后来对结果感到困惑,因为它在 strftime
.
def to_reserve
venue = Venue.find(params[:id])
venue_name = venue.name.delete(' ')
reference_number = ReferencesNumberWorker.perform_in(5.seconds, venue_name)
................
end
Sidekiq:
class ReferencesNumberWorker
include Sidekiq::Worker
def perform(venue_name)
reference_number = DateTime.now.strftime('Y%m%d%H%M%S')
return venue_name + reference_number
end
end
这是示例结果:
HotelMatt67fb02cb5da7871f92347df9
没想到结果是对的。
这是将 Sidekiq 作业的哈希值附加到您希望它附加 Sidekiq 结果的 return 的参考号。
基本上就是这个方法
def to_reserve
venue = Venue.find(params[:id])
venue_name = venue.name.delete(' ')
reference_number = ReferencesNumberWorker.perform_in(5.seconds, venue_name) <- This line will return Sidekiq job number, not the actual result from Sidekiq perform operation.
................
end
当您定义参考号时,您假设它会为您提供 Sidekiq return,但事实并非如此。这是后台作业的基本点。您正在将 Sidekiq 作业与您正在做的事情断开连接,即卸载到一个单独的进程。所以你不能期望 return,你正在将方法卸载到 Sidekiq。 Sidekiq 的 return 基本上就是职位编号。
如果你想让它工作,那么将你正在做的参考号计算移到 Sidekiq 的 to_reserve
方法中,或者如果它必须在 Sidekiq 中完成,则将所有逻辑从 to_reserve
到 Sidekiq 的 perform
方法。
另请注意,要使用 Sidekiq,您应该将对象的 ID 传递(给 Sidekiq),以便您可以在 Sidekiq 中重新查找它并对对象执行一些 idempotent 操作。在我看来,我认为在这种情况下您不需要使用 Sidekiq。它不必要的复杂性,但对每个人来说都是自己的。
旁注:优先使用时间 class(Time#now
对比 DateTime#now
)而不是 DateTime 来计算 strftime
方法。它是一种纯粹的 Ruby 方法,比 DateTime class(已知的性能瓶颈)更快。此外,您的代码不会硬依赖 Rails。