Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails gem类重写实现加载顺序_Ruby On Rails_Ruby_Rubygems_Faye_Private Pub - Fatal编程技术网

Ruby on rails Rails gem类重写实现加载顺序

Ruby on rails Rails gem类重写实现加载顺序,ruby-on-rails,ruby,rubygems,faye,private-pub,Ruby On Rails,Ruby,Rubygems,Faye,Private Pub,我想替换我正在使用的gem中的特定ruby文件 我使用的gem是private_pub:我要替换的文件是: 因此,我决定在rails项目中,在config/initializers中添加一个名为faye_extension.rb的新文件,其中包含以下代码: PrivatePub::FayeExtension puts "Overide loaded" module PrivatePub # This class is an extension for the Faye::RackAdapte

我想替换我正在使用的gem中的特定ruby文件

我使用的gem是private_pub:我要替换的文件是:

因此,我决定在rails项目中,在config/initializers中添加一个名为faye_extension.rb的新文件,其中包含以下代码:

PrivatePub::FayeExtension
puts "Overide loaded"
module PrivatePub
  # This class is an extension for the Faye::RackAdapter.
  # It is used inside of PrivatePub.faye_app.
  class FayeExtension
    # Callback to handle incoming Faye messages. This authenticates both
    # subscribe and publish calls.
    def incoming(message, callback)
    puts "MY MEGA CHANGE"
    logger.debug "inside incoming override"
      if message["channel"] == "/meta/subscribe"
           puts "subscription request received"
        authenticate_subscribe(message)
      elsif message["channel"] !~ %r{^/meta/}
        puts "publish request received"
        authenticate_publish(message)
      end
      callback.call(message)
    end

  private

    # Ensure the subscription signature is correct and that it has not expired.
    def authenticate_subscribe(message)
      subscription = PrivatePub.subscription(:channel => message["subscription"], :timestamp => message["ext"]["private_pub_timestamp"])
      if message["ext"]["private_pub_signature"] != subscription[:signature]
        message["error"] = "Incorrect signature."
      elsif PrivatePub.signature_expired? message["ext"]["private_pub_timestamp"].to_i
        message["error"] = "Signature has expired."
      end
    end

    # Ensures the secret token is correct before publishing.
    def authenticate_publish(message)
      if PrivatePub.config[:secret_token].nil?
        raise Error, "No secret_token config set, ensure private_pub.yml is loaded properly."
      elsif message["ext"]["private_pub_token"] != PrivatePub.config[:secret_token]
        message["error"] = "Incorrect token."
      else
        message["ext"]["private_pub_token"] = nil
      end
    end
  end
end
我在顶部包含“PrivatePub::FayeExtension”的原因是为了强制自动加载,这样FayeExtension类将覆盖gem的实现。但是,当我执行驱动此逻辑的代码路径时,日志中没有显示我添加的puts语句。值得一提的是,我确实看到了“过度加载”,但我相信这种情况会发生,然后,不知何故,使用了gem的实现。这让我相信gem的faye_extension.rb正在被使用,而不是我的版本


如何强制使用我的版本而不是gem的版本

您必须使用Rails logger来代替puts,我认为它是由Rails执行的,但是puts输出不在标准终端上。我有行“logger.debug”Inner incoming override“,所以我应该在哪里检查以查看它?没有development.log?这是在生产环境中,我有err.unicorn.log和out.unicorn.log,它们都不包含“内部传入覆盖”