我想要根据需要从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
全球宝石?
答案 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-webdriver
和gem environment
并从那里复制。