我有一个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 。我想我错过了一些简单的东西。我该怎么办 要求_相关 全球宝石?
require_relative
要求_相关
第一个解决方案是在与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安装在系统范围内,您可以执行以下操作
Process.spawn
ENV['GEM_PATH'] = "c:/Ruby220/lib/ruby/gems/2.2.0"
在你的顶部 ds-vin.rb 剧本要找到应该使用的确切gem路径,请确保运行 gem which watir-webdriver 和 gem environment 并从那里复制。
ds-vin.rb
gem which watir-webdriver
gem environment