我需要访问config / initializers / myFile.rb中的变量,在我的模型中,我在此文件中有一个ActiveSupport订阅方法
ActiveSupport::Notifications.subscribe "deliver.action_mailer" do |name, started, finished, unique_id, data|
::EstablishmentRoutingHashes = the_hash_route
end
我想在我的模型中访问此变量
class Establishment < ActiveRecord::Base
EstablishmentRoutingHashes // want to use it in here
end
但是我在EstablishmentsController #create中收到此错误 NameError 未初始化的常数建立:: EstablishmentRoutingHashes
我用另一种仪器做了这个并且它有效,不同的是这个来自我在我的一个控制器中的自定义仪器事件
def create
ActiveSupport::Notifications.instrument("create.application", @payload_hash)
end
你能告诉我如何解决这个错误吗?
答案 0 :(得分:0)
::EstablishmentRoutingHashes
是常数。您应该只为常量赋值一次。多次触发deliver.action_mailer
,因此您会看到多个警告,例如warning: already initialized constant ...
。但这不是导致错误的原因。
显示您的错误NameError in EstablishmentsController#create uninitialized constant Establishment::EstablishmentRoutingHashes
,因为当您的Rails-App启动时未定义此常量。它将在第一次执行subscribe
块的代码时定义。
当你使用像sidekiq这样的异步传递方法或simalar之类的东西时,它会变得更糟,因为这个块在作业中被调用而不是Rails-App。
即使是像puma这样的多线程服务器也会遇到竞争条件。
我认为您需要一种不同的方法来解决您的初始问题。
你必须做一些事情:
ActiveSupport::Notifications.subscribe "deliver.action_mailer" do |name, started, finished, unique_id, data|
new_establishment = Establishment.find_or_create ...
establishment.execute_an_action the_hash_route
end