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

时间:2016-01-05 17:11:41

标签: ruby-on-rails ruby selenium rubygems watir-webdriver

我想要根据需要从Rails应用程序启动一个watir脚本。我的控制器动作看起来像这样:

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-webdriver在我的宝石列表中。我还需要在同一个文件夹中使用几个.rb文件,这是一个问题,直到我使用require_relative。我想,我在这里错过了一些简单的东西。我如何require_relative全球宝石?

1 个答案:

答案 0 :(得分:1)

第一个解决方案是在与Rails相同的过程中运行您的scraper,但是在另一个线程中:

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

其次是如果您要使用Process.spawn来修复您的环境 - 假设您的宝石已在系统范围内安装,您可以执行类似

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

位于ds-vin.rb脚本的顶部。要找到您应该使用的确切宝石路径,请确保您运行gem which watir-webdrivergem environment并从那里复制。