在Ruby * basic *中使用gem

时间:2015-10-16 13:03:26

标签: ruby cmd gem

我是一个完整的新手。

我有一个我想要安装和使用的宝石,让我们说它就是这个:

https://rubygems.org/gems/linkedindata/versions/0.0.22

我正在使用cmd:

gem install linkedindata
#1 gem installed

之后我将它添加到我的gemfile:

gemrat 'linkedindata'
#gem 'linkedindata', '0.0.22' added to your Gemfile.

现在要使用linkedindata我必须创建一个新对象并指定我的搜索。所以我这样做:

**test.rb**
l = LinkedinData.new(1, "c:/users/proxylist.txt", true, true)
searchTerms = ['First', 'Second', 'Third']
l.getByKeywords(searchTerms)

现在我从命令提示符运行test.rb:

test.rb:1:in `<main>': undefined local variable or meth
od `linkedindata' for main:Object (NameError)

所以,我显然需要在这里要求'linkedindata'宝石。我补充说:

**test.rb**
require 'LinkedinData'
l = LinkedinData.new(1, "c:/users/proxylist.txt", true, true)
searchTerms = ['First', 'Second', 'Third']
l.getByKeywords(searchTerms)

我收到以下错误:

C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `re
quire': cannot load such file -- linkedin-scraper (LoadError)
        from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require
.rb:54:in `require'
        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/linkedindata-0.0.22/lib/linkedin
data.rb:1:in `<top (required)>'
        from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require
.rb:128:in `require'
        from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require
.rb:128:in `rescue in require'
        from C:/Ruby22/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require
.rb:39:in `require'
        from C:/Users/test.rb:1:in `<main>'

我在这里做了一些根本错误的事吗?或者这个宝石有问题吗?

更新

问题出在宝石内,请参阅下面的Doon的回答。

require 'rubygems'
require 'bundler/setup'
require 'linkedindata'
l = LinkedinData.new(1, "proxylist.txt", true, true)
searchTerms = ['First', 'Second', 'Third']
l.getByKeywords(searchTerms)

++++更正gem如何在linkedindata.rb中使用“linkedin_scraper”

发生下一个问题

 C:/Ruby22/lib/ruby/gems/2.2.0/gems/linkedindata-0.0.22/lib/linkedin.rb:6:in `<cl
ass:Profile>': uninitialized constant Linkedin::Profile::ProxyManager (NameError
)
        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/linkedindata-0.0.22/lib/linkedin
.rb:5:in `<module:Linkedin>'
        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/linkedindata-0.0.22/lib/linkedin
.rb:4:in `<top (required)>'
        from linkedinscrape.rb:4:in `require'
        from linkedinscrape.rb:4:in `<main>'

这显然与代理设置有关。清单:

**proxylist.txt**
220.248.224.242:8089
165.139.179.225:8080
54.207.114.172:3333
190.63.174.246:8081

我加载它的方式:

l = LinkedinData.new(1, "c:/users/proxylist.txt")

1 个答案:

答案 0 :(得分:2)

当您使用Gemfile时,您正在使用bundler。在您的脚本中,您需要包含rubygemsbundler才能使其正常运行。试试这个

require 'rubygems'
require 'bundler/setup'

require 'linkedindata'

l = LinkedinData.new(1, "c:/users/proxylist.txt", true, true)
searchTerms = ['First', 'Second', 'Third']
l.getByKeywords(searchTerms)

你已经运行bundle install,抱歉不熟悉gemrat,所以不确定它对你有多大帮助。

如果您实际上没有使用bundler,只需从上面的代码中删除require 'bundler/setup',您仍然需要在脚本中使用rubygems。

看起来像gem本身在声明依赖关系的方式上有所破坏,以及它所依赖的其他宝石。我似乎能够按如下方式工作:

Gemfile:

source 'https://rubygems.org'
gem 'linkedin-scraper'
gem 'linkedindata'
gem 'generalscraper'
gem 'uploadconvert'
gem 'docsplit'
gem 'crack'
gem 'pry'
gem 'activesupport'
gem 'selenium-webdriver'

似乎linkedin-scraper需要linkedin_scraper,但不确定原因是什么。所以编辑。

{GEMPATH}/linkedindata-0.0.22/lib/linkedindata.rbrequire 'linkedin_scraper'相对于require 'linkedin-scraper'似乎可以使其发挥作用。

所以使用上述更改并使用bundler

require 'rubygems'
require 'bundler/setup'
require 'linkedindata'
l = LinkedinData.new(1, "proxylist.txt", true, true)
searchTerms = ['First', 'Second', 'Third']
l.getByKeywords(searchTerms)

现在运行(我没有proxylist.txt,因此它会查找它,但它不会再出现库错误。)