【问题标题】:Passing arguments while debugging调试时传递参数
【发布时间】:2021-09-06 15:30:42
【问题描述】:

我正在尝试调试 Ruby 脚本,但我无法访问如下所示的一种方法。

  def move_objects(target_folder)
    s3_objects.each do |obj|
      binding.pry
      new_key = s3_folder ? obj.key.sub(s3_folder, target_folder) : "#{target_folder}/#{obj.key}"
      obj.put(metadata: { 'new_key' => 'ok' })
      obj.move_to(bucket: bucket_name, key: new_key)
    end
    self
  end

当我在 Rails C 中这样调用方法时:

 Courts::Aws::S3Util.new('bucket_name').move_objects(target_folder)

我收到以下错误。

NameError: undefined local variable or method `target_folder' for main:Object

访问此函数以调试和读取 new_key 数据的适当方法是什么?

【问题讨论】:

  • 如果您不确定target_folder 的值应该是什么,那么只需使用空字符串Courts::Aws::S3Util.new('bucket_name').move_objects('') 调用它并进行相应的调试。
  • target_folder 是传递给函数的参数的变量名。 调用方法时需要给它一个实际值。这适用于所有编程语言中的所有方法。例如,您可以调用move_objects('example-target-folder'),也可以先分配一个局部变量,然后使用该变量调用它:cdln = "example-target-folder'; ... move_objects(cdln)

标签: ruby-on-rails ruby pry byebug


【解决方案1】:

您应该在将target_folder 变量作为参数传递给方法之前对其进行初始化

target_folder = "target-folder-name"   # Initialize with appropriate folder name or leave it empty "" (i.e., target_folder = "")

Courts::Aws::S3Util.new('bucket_name').move_objects(target_folder)

【讨论】:

    【解决方案2】:

    您是否尝试将方法包装在开始/救援块周围?

    def move_objects(target_folder)
      begin
        s3_objects.each do |obj|
          binding.pry
          new_key = s3_folder ? obj.key.sub(s3_folder, target_folder) : "#{target_folder}/#{obj.key}"
          obj.put(metadata: { 'new_key' => 'ok' })
          obj.move_to(bucket: bucket_name, key: new_key)
        end
        self
      rescue => e
        binding.pry
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 2010-10-12
      • 2013-03-11
      • 2015-09-10
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多