QA@IT
«質問へ戻る

2
本文
 quRankUrl = arRankUrl.join(", ")
 quRankNum = arRankNum.join(", ")
 ```
+
+
+### ====追記(10/11 15:50)====
+下記の方法でエラーを出力したところ、証明書のエラーが吐き出されておりました。
+そのために以降の処理で、エラーしていたようです。
+```ruby
+SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
+```
+レンタルサーバーのため、証明書がなく、また証明書をおくディレクトリにアクセス出来ないため、
+SSl対応の部分で、対応していたつもりでしたが、
+記述が間違っているでしょうか?
+(cacert.pemのパーミッションは755に一応しており、File.exist?により、存在している事は確認しております)
+
+
+```ruby
+#スクレイピング
+charset = nil
+begin
+  html = open(url) do |f| 
+    charset = f.charset               
+    f.read   
+  end
+rescue => e
+  File.open("check_scraping.txt","w") do |file|
+    file.puts(e.message)
+    file.puts(e.backtrace)
+  end  
+end
+```

CronでRubyのNokogiriを動かそうとするとエラーする

レンタルサーバーを利用して、CronでRubyのスクリプトを動かしたいのですが、エラーして困っております。
ターミナルからRubyのスクリプトを叩く分には、正しく動作するため、権限またはパスの問題かと考えましたが、
落ちている箇所がそうでは無いようなので、解決できずにおります。

cronを用いた場合の、rubyのエラーの吐き出し方が不明なため、怪しい箇所にtxtファイルを生成する処理を入れて、デバッグしております。

質問1
cronを用いた場合、エラーはどのように出力すればよいのでしょうか?
質問2
cronで動かす場合、権限、パス以外に、問題になる要素とはどのようなものでしょうか?
質問3
下記のスクリプトの問題を教えていただきたいです。

require 'rbconfig'
require 'openssl'
require "open-uri"
require "rubygems"
require "nokogiri"
require 'net/https'
require 'fileutils'

# スクレイピングするURL
url = 'https://play.google.com/store/apps/collection/topgrossing'

#SSl対応
http = Net::HTTP.new(url, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
abc = File.dirname(__FILE__) + '/cacert.pem'
http.cert_store.add_file(abc)

#ファイル出力で処理がどこまで進んだかチェックしています。
#ファイルは正しく存在しているので、ここまでは問題ありません。
if  File.exist?(abc) then
    File.open("check01.txt","w") do |file|
      file.puts(abc)
    end
end

#スクレイピング
charset = nil
html = open(url) do |f| 
  charset = f.charset               
  f.read   
end

#ファイル出力で処理がどこまで進んだかチェックしています。
#このファイルは出力されておらず、この箇所以前で処理がとまっています
File.open("check02.txt","w") do |file|
  file.puts(charset)
  file.puts(html)
  file.puts(url)
end


#要素格納用配列 utf-8
new_posts = Array.new()
arRankTitle = Array.new()
arRankUrl = Array.new()
arRankNum = Array.new()
rankNum = 1
quTitle = ""

# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)

#タイトル
quTitle = doc.title
puts quTitle

#アプリタイトルとURLを
doc.xpath('//div[@class = "details"]/a').each do |node|
    #変数
    tt = nil
    print "--------------------\n"
    title2 = node.inner_text

    #からオブジェクトが居るので間引く
    if title2.empty?
    else 
        #print  title2.gsub(" ", ""),"<=空白削除\n"  #空白削除
        tt = title2.gsub(" ", "")
        #print tt,"tt1です。\n" 
        #p tt


        #順位表示の文字位置を取得
        tilteNum = title2.dup    
        tilteNum = /\./ =~ tilteNum    #何位までの文字を削除
        num = tilteNum.to_i
        #p num


        #testMoji = "abcdefg"
        testMoji = tt
        set =  testMoji.slice!(num..-1)
        #print set,"\n"


        #URL
        hrAp ="https://play.google.com" + node[:href]
        #puts hrAp

        #順位
        puts rankNum,"<=順位です。\n" 

        #配列に格納する
        #new_post = [set,hrAp,rankNum]
        #new_posts << new_post        
        arRankTitle << set
        arRankUrl << hrAp
        arRankNum << rankNum


        #順位の値を増やしていく
        rankNum = rankNum + 1
    end 



end



#配列を確認
#puts new_posts
#puts arRankTitle
#puts arRankUrl
#puts arRankNum


#日時
#SQLに入れるべき形 2014-01-11 00:55:29
tNum = Time.now.strftime("%Y-%m-%d %H:%M:%S") 
puts tNum

puts quTitle
#sqlに挿入する形に変更
quRankTitle = arRankTitle.join(", ")
quRankUrl = arRankUrl.join(", ")
quRankNum = arRankNum.join(", ")

====追記(10/11 15:50)====

下記の方法でエラーを出力したところ、証明書のエラーが吐き出されておりました。
そのために以降の処理で、エラーしていたようです。

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

レンタルサーバーのため、証明書がなく、また証明書をおくディレクトリにアクセス出来ないため、
SSl対応の部分で、対応していたつもりでしたが、
記述が間違っているでしょうか?
(cacert.pemのパーミッションは755に一応しており、File.exist?により、存在している事は確認しております)

#スクレイピング
charset = nil
begin
  html = open(url) do |f| 
    charset = f.charset               
    f.read   
  end
rescue => e
  File.open("check_scraping.txt","w") do |file|
    file.puts(e.message)
    file.puts(e.backtrace)
  end  
end
レンタルサーバーを利用して、CronでRubyのスクリプトを動かしたいのですが、エラーして困っております。
ターミナルからRubyのスクリプトを叩く分には、正しく動作するため、権限またはパスの問題かと考えましたが、
落ちている箇所がそうでは無いようなので、解決できずにおります。

cronを用いた場合の、rubyのエラーの吐き出し方が不明なため、怪しい箇所にtxtファイルを生成する処理を入れて、デバッグしております。

質問1
cronを用いた場合、エラーはどのように出力すればよいのでしょうか?
質問2
cronで動かす場合、権限、パス以外に、問題になる要素とはどのようなものでしょうか?
質問3
下記のスクリプトの問題を教えていただきたいです。

```ruby
require 'rbconfig'
require 'openssl'
require "open-uri"
require "rubygems"
require "nokogiri"
require 'net/https'
require 'fileutils'

# スクレイピングするURL
url = 'https://play.google.com/store/apps/collection/topgrossing'

#SSl対応
http = Net::HTTP.new(url, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
abc = File.dirname(__FILE__) + '/cacert.pem'
http.cert_store.add_file(abc)

#ファイル出力で処理がどこまで進んだかチェックしています。
#ファイルは正しく存在しているので、ここまでは問題ありません。
if  File.exist?(abc) then
	File.open("check01.txt","w") do |file|
	  file.puts(abc)
	end
end

#スクレイピング
charset = nil
html = open(url) do |f|	
  charset = f.charset 				
  f.read   
end

#ファイル出力で処理がどこまで進んだかチェックしています。
#このファイルは出力されておらず、この箇所以前で処理がとまっています
File.open("check02.txt","w") do |file|
  file.puts(charset)
  file.puts(html)
  file.puts(url)
end


#要素格納用配列 utf-8
new_posts = Array.new()
arRankTitle = Array.new()
arRankUrl = Array.new()
arRankNum = Array.new()
rankNum = 1
quTitle = ""

# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)

#タイトル
quTitle = doc.title
puts quTitle

#アプリタイトルとURLを
doc.xpath('//div[@class = "details"]/a').each do |node|
    #変数
    tt = nil
    print "--------------------\n"
    title2 = node.inner_text
    
    #からオブジェクトが居るので間引く
    if title2.empty?
    else 
        #print  title2.gsub(" ", ""),"<=空白削除\n"  #空白削除
        tt = title2.gsub(" ", "")
        #print tt,"tt1です。\n" 
        #p tt

    
        #順位表示の文字位置を取得
        tilteNum = title2.dup    
        tilteNum = /\./ =~ tilteNum    #何位までの文字を削除
        num = tilteNum.to_i
        #p num


        #testMoji = "abcdefg"
        testMoji = tt
        set =  testMoji.slice!(num..-1)
        #print set,"\n"
        
    
        #URL
        hrAp ="https://play.google.com" + node[:href]
        #puts hrAp
        
        #順位
        puts rankNum,"<=順位です。\n" 
        
        #配列に格納する
        #new_post = [set,hrAp,rankNum]
        #new_posts << new_post        
        arRankTitle << set
        arRankUrl << hrAp
        arRankNum << rankNum
        
        
        #順位の値を増やしていく
        rankNum = rankNum + 1
    end 
    
    

end



#配列を確認
#puts new_posts
#puts arRankTitle
#puts arRankUrl
#puts arRankNum


#日時
#SQLに入れるべき形 2014-01-11 00:55:29
tNum = Time.now.strftime("%Y-%m-%d %H:%M:%S") 
puts tNum

puts quTitle
#sqlに挿入する形に変更
quRankTitle = arRankTitle.join(", ")
quRankUrl = arRankUrl.join(", ")
quRankNum = arRankNum.join(", ")
```


### ====追記(10/11 15:50)====
下記の方法でエラーを出力したところ、証明書のエラーが吐き出されておりました。
そのために以降の処理で、エラーしていたようです。
```ruby
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
```
レンタルサーバーのため、証明書がなく、また証明書をおくディレクトリにアクセス出来ないため、
SSl対応の部分で、対応していたつもりでしたが、
記述が間違っているでしょうか?
(cacert.pemのパーミッションは755に一応しており、File.exist?により、存在している事は確認しております)


```ruby
#スクレイピング
charset = nil
begin
  html = open(url) do |f| 
    charset = f.charset               
    f.read   
  end
rescue => e
  File.open("check_scraping.txt","w") do |file|
    file.puts(e.message)
    file.puts(e.backtrace)
  end  
end
```

質問を投稿

CronでRubyのNokogiriを動かそうとするとエラーする

レンタルサーバーを利用して、CronでRubyのスクリプトを動かしたいのですが、エラーして困っております。
ターミナルからRubyのスクリプトを叩く分には、正しく動作するため、権限またはパスの問題かと考えましたが、
落ちている箇所がそうでは無いようなので、解決できずにおります。

cronを用いた場合の、rubyのエラーの吐き出し方が不明なため、怪しい箇所にtxtファイルを生成する処理を入れて、デバッグしております。

質問1
cronを用いた場合、エラーはどのように出力すればよいのでしょうか?
質問2
cronで動かす場合、権限、パス以外に、問題になる要素とはどのようなものでしょうか?
質問3
下記のスクリプトの問題を教えていただきたいです。

require 'rbconfig'
require 'openssl'
require "open-uri"
require "rubygems"
require "nokogiri"
require 'net/https'
require 'fileutils'

# スクレイピングするURL
url = 'https://play.google.com/store/apps/collection/topgrossing'

#SSl対応
http = Net::HTTP.new(url, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
abc = File.dirname(__FILE__) + '/cacert.pem'
http.cert_store.add_file(abc)

#ファイル出力で処理がどこまで進んだかチェックしています。
#ファイルは正しく存在しているので、ここまでは問題ありません。
if  File.exist?(abc) then
    File.open("check01.txt","w") do |file|
      file.puts(abc)
    end
end

#スクレイピング
charset = nil
html = open(url) do |f| 
  charset = f.charset               
  f.read   
end

#ファイル出力で処理がどこまで進んだかチェックしています。
#このファイルは出力されておらず、この箇所以前で処理がとまっています
File.open("check02.txt","w") do |file|
  file.puts(charset)
  file.puts(html)
  file.puts(url)
end


#要素格納用配列 utf-8
new_posts = Array.new()
arRankTitle = Array.new()
arRankUrl = Array.new()
arRankNum = Array.new()
rankNum = 1
quTitle = ""

# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)

#タイトル
quTitle = doc.title
puts quTitle

#アプリタイトルとURLを
doc.xpath('//div[@class = "details"]/a').each do |node|
    #変数
    tt = nil
    print "--------------------\n"
    title2 = node.inner_text

    #からオブジェクトが居るので間引く
    if title2.empty?
    else 
        #print  title2.gsub(" ", ""),"<=空白削除\n"  #空白削除
        tt = title2.gsub(" ", "")
        #print tt,"tt1です。\n" 
        #p tt


        #順位表示の文字位置を取得
        tilteNum = title2.dup    
        tilteNum = /\./ =~ tilteNum    #何位までの文字を削除
        num = tilteNum.to_i
        #p num


        #testMoji = "abcdefg"
        testMoji = tt
        set =  testMoji.slice!(num..-1)
        #print set,"\n"


        #URL
        hrAp ="https://play.google.com" + node[:href]
        #puts hrAp

        #順位
        puts rankNum,"<=順位です。\n" 

        #配列に格納する
        #new_post = [set,hrAp,rankNum]
        #new_posts << new_post        
        arRankTitle << set
        arRankUrl << hrAp
        arRankNum << rankNum


        #順位の値を増やしていく
        rankNum = rankNum + 1
    end 



end



#配列を確認
#puts new_posts
#puts arRankTitle
#puts arRankUrl
#puts arRankNum


#日時
#SQLに入れるべき形 2014-01-11 00:55:29
tNum = Time.now.strftime("%Y-%m-%d %H:%M:%S") 
puts tNum

puts quTitle
#sqlに挿入する形に変更
quRankTitle = arRankTitle.join(", ")
quRankUrl = arRankUrl.join(", ")
quRankNum = arRankNum.join(", ")
レンタルサーバーを利用して、CronでRubyのスクリプトを動かしたいのですが、エラーして困っております。
ターミナルからRubyのスクリプトを叩く分には、正しく動作するため、権限またはパスの問題かと考えましたが、
落ちている箇所がそうでは無いようなので、解決できずにおります。

cronを用いた場合の、rubyのエラーの吐き出し方が不明なため、怪しい箇所にtxtファイルを生成する処理を入れて、デバッグしております。

質問1
cronを用いた場合、エラーはどのように出力すればよいのでしょうか?
質問2
cronで動かす場合、権限、パス以外に、問題になる要素とはどのようなものでしょうか?
質問3
下記のスクリプトの問題を教えていただきたいです。

```ruby
require 'rbconfig'
require 'openssl'
require "open-uri"
require "rubygems"
require "nokogiri"
require 'net/https'
require 'fileutils'

# スクレイピングするURL
url = 'https://play.google.com/store/apps/collection/topgrossing'

#SSl対応
http = Net::HTTP.new(url, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
abc = File.dirname(__FILE__) + '/cacert.pem'
http.cert_store.add_file(abc)

#ファイル出力で処理がどこまで進んだかチェックしています。
#ファイルは正しく存在しているので、ここまでは問題ありません。
if  File.exist?(abc) then
	File.open("check01.txt","w") do |file|
	  file.puts(abc)
	end
end

#スクレイピング
charset = nil
html = open(url) do |f|	
  charset = f.charset 				
  f.read   
end

#ファイル出力で処理がどこまで進んだかチェックしています。
#このファイルは出力されておらず、この箇所以前で処理がとまっています
File.open("check02.txt","w") do |file|
  file.puts(charset)
  file.puts(html)
  file.puts(url)
end


#要素格納用配列 utf-8
new_posts = Array.new()
arRankTitle = Array.new()
arRankUrl = Array.new()
arRankNum = Array.new()
rankNum = 1
quTitle = ""

# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)

#タイトル
quTitle = doc.title
puts quTitle

#アプリタイトルとURLを
doc.xpath('//div[@class = "details"]/a').each do |node|
    #変数
    tt = nil
    print "--------------------\n"
    title2 = node.inner_text
    
    #からオブジェクトが居るので間引く
    if title2.empty?
    else 
        #print  title2.gsub(" ", ""),"<=空白削除\n"  #空白削除
        tt = title2.gsub(" ", "")
        #print tt,"tt1です。\n" 
        #p tt

    
        #順位表示の文字位置を取得
        tilteNum = title2.dup    
        tilteNum = /\./ =~ tilteNum    #何位までの文字を削除
        num = tilteNum.to_i
        #p num


        #testMoji = "abcdefg"
        testMoji = tt
        set =  testMoji.slice!(num..-1)
        #print set,"\n"
        
    
        #URL
        hrAp ="https://play.google.com" + node[:href]
        #puts hrAp
        
        #順位
        puts rankNum,"<=順位です。\n" 
        
        #配列に格納する
        #new_post = [set,hrAp,rankNum]
        #new_posts << new_post        
        arRankTitle << set
        arRankUrl << hrAp
        arRankNum << rankNum
        
        
        #順位の値を増やしていく
        rankNum = rankNum + 1
    end 
    
    

end



#配列を確認
#puts new_posts
#puts arRankTitle
#puts arRankUrl
#puts arRankNum


#日時
#SQLに入れるべき形 2014-01-11 00:55:29
tNum = Time.now.strftime("%Y-%m-%d %H:%M:%S") 
puts tNum

puts quTitle
#sqlに挿入する形に変更
quRankTitle = arRankTitle.join(", ")
quRankUrl = arRankUrl.join(", ")
quRankNum = arRankNum.join(", ")
```