rbenvでrubyをインストールした環境でcronを使ってrubyプログラムを動かしているつもりが動かなくなってました
gemがないとかでエラーが
手っ取り早くフルパスを指定してあげました
$ crontab -e
*/5 * * * * /usr/local/rbenv/versions/2.3.0/bin/ruby ./test.rb
いけてないですが応急処置
ひびのきろく
rbenvでrubyをインストールした環境でcronを使ってrubyプログラムを動かしているつもりが動かなくなってました
gemがないとかでエラーが
手っ取り早くフルパスを指定してあげました
$ crontab -e
*/5 * * * * /usr/local/rbenv/versions/2.3.0/bin/ruby ./test.rb
いけてないですが応急処置
RubyでNokogiriを使ってウェブサイトをスクレイピングしているとたまに要素がないってエラーが..
おそらくHTMLのレスポンスが来る前に動いているようなので対策してみました
のGemを使うことにしました
事前準備といてGoogle Chrome と chrome driverを入れました
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo apt-get update
$ sudo apt-get install google-chrome-stable
$ sudo apt-get install unzip xvfb
googleのwebdriverのzipをダウンロード
Downloads – ChromeDriver – WebDriver for Chrome
unzipして使えるようします
$ chmod +x chromedriver
$ sudo chromedriver /usr/local/share
$ sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
$ sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
google chrome をインストール
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo apt-get update
$ sudo apt-get install google-chrome-stable
あとはRubyを書きます
Gemfile
source "https://rubygems.org"
gem "nokogiri"
gem "hipchat"
gem "slack-api"
gem "watir"
gem "watir-webdriver"
gem "headless"
sample.rb
require 'open-uri'
require 'nokogiri'
require 'watir'
require 'watir-webdriver'
require 'headless'
url = 'http://google.co.jp'
headless = Headless.new
headless.start
browser = Watir::Browser.new :chrome
browser.goto url
doc = Nokogiri::HTML.parse(browser.html)
p doc.xpath('//div[@class="sample"]/a')[0].text
browser.close
headless.destroy
$ bundle install
して
$ ruby sample.rb
といった感じでできました
あるgemのリポジトリをcloneしてきて、bundleするとsqlite3あたりでエラーが..
$ bundle
An error occurred while installing sqlite3 (1.3.10), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.3.10'` succeeds before bundling.
sqlite3をいれろということなのでしたがって
$ gem install sqlite3 -v ‘1.3.10’
Building native extensions. This could take a while...
ERROR: Error installing sqlite3:
ERROR: Failed to build gem native extension.
/home/user/.rbenv/versions/2.2.3/bin/ruby -r ./siteconf20151008-14352-17hawla.rb extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
またしてもエラー
ライブラリが足りないらしい、Ubuntuだったので
$ sudo apt-get install libsqlite3-dev
これでbundleしてみる
$ bundle
と、無事入りました
bundle時にエラーが発生
Bundler::GemspecError: Could not read gem at /home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/cache/nokogiri-1.6.6.2.gem. It may be corrupted.
An error occurred while installing nokogiri (1.6.6.2), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.6.2'` succeeds before bundling.
cacheが読めない?
nokogiriのキャッシュが2つあったので、両方消してみました
$ rm -rf /home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/cache/nokogiri-1.6.*
$ bundle
これでうまく行きました