代码之家  ›  专栏  ›  技术社区  ›  dsp_099

当目标脚本由另一个Ruby脚本生成时,未找到Ruby gem

  •  1
  • dsp_099  · 技术社区  · 9 年前

    我有一个watir脚本,我想按需从Rails应用程序中启动。我的控制器操作如下:

    def run_scrape
      pid = Process.spawn('C:\Ruby22-x64\bin\ruby.exe "C:\Users\Admin\Dropbox\dev\watir-scripts\ds-vin.rb" 3VWB07AJ')
      Process.detach(pid)
      true
    end
    

    实际脚本开始于:

    require 'watir-webdriver'
    b = Watir::Browser.new :ie
    # etc
    

    现在,如果我导航到文件夹并直接运行脚本,一切都正常。一旦它被Rails触发(它位于不同的位置;看起来很混乱),我会收到以下错误:

    `require:无法加载此类文件--watir webdriver(LoadError)

    Watir网络驱动程序在我的宝石列表中。我还需要同一文件夹中的几个.rb文件,这在我使用之前是个问题 require_relative 。我想我错过了一些简单的东西。我该怎么办 要求_相关 全球宝石?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Martin Konecny    9 年前

    第一个解决方案是在与Rails相同的进程中运行刮板,但使用不同的线程:

    require 'C:\Users\Admin\Dropbox\dev\watir-scripts\ds-vin.rb'
    thr = Thread.new do 
        b = Watir::Browser.new :ie
        ...
    end
    

    第二,如果您要使用 Process.spawn -假设您的gem安装在系统范围内,您可以执行以下操作

    ENV['GEM_PATH'] = "c:/Ruby220/lib/ruby/gems/2.2.0"
    

    在你的顶部 ds-vin.rb 剧本要找到应该使用的确切gem路径,请确保运行 gem which watir-webdriver gem environment 并从那里复制。