ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Error weg bekommen
BeitragVerfasst: 01 Apr 2017, 11:41 
Offline
Lehrling
Benutzeravatar

Registriert: 21 Sep 2016, 19:20
Beiträge: 57
Ich will mit dem duckduckgo Gem womit man DuckDuckGo (DuckDuckGo ist eine Suchmaschine) in Ruby nutzen kann Webseiten suchen. Und das würde eigentlich mit diesem Code funktionieren:

1
2
3
4
5
6
7
8
9
10
require 'duckduckgo'

results = DuckDuckGo::search(:query => 'Apples') #Sucht "Apples" bei DuckDuckGo
result = results.first #Nimmt nur die erste gefundene Webseite

puts result.uri #Zeigt den URL der ersten gefundenen Webseite

puts result.title #Zeigt den Titel der ersten gefundenen Webseite

puts result.description #Zeigt die Beschreibung der ersten gefundenen Webseite


Aber er zeigt mir dann immer diesen Error:

C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock': SSL_connect returned=1 errno=0 state=error: certificate verify failed (OpenSSL::SSL::SSLError)
from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:933:in `connect'
from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:863:in `do_start'
from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:852:in `start'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:319:in `open_http'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:737:in `buffer_open'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:212:in `block in open_loop'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:210:in `catch'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:210:in `open_loop'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:151:in `open_uri'
from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/open_uri_redirections-0.2.1/lib/open-uri/redirections_patch.rb:55:in `open_uri'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:717:in `open'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:35:in `open'
from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/duckduckgo-0.1.5/lib/duckduckgo/search.rb:24:in `search'
from C:/Users/LuckyChicken/Desktop/duckduckgo.rb:3:in `<main>'


Wie kann ich diesen Error beheben?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Error weg bekommen
BeitragVerfasst: 01 Apr 2017, 19:51 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Ich habe eben mal schnell in den Quellcode des Gems geschaut. Es ist ein WebScraper, sobald duckduckgo das Layout der Seite oder ein paar CSS Klassen verändert, fällt das von dir erwähnte Gem auseinander. Das erst einmal generell.

Zu dem eigentlichen Problem, bleibt wohl nur zu sagen, dass du es unter Windows nur mit erheblichem Aufwand wegbekommen kannst, und selbst dieser Aufwand wird nicht garantiert zu einem Erfolg führen. Einigen betroffenen hilft es einfach mal nen Windows-Update zu machen, andere müssen per Hand und unter großem Aufwand erst Zertifikate installieren, wieder andere berichteten, dass sie unter noch höherem Aufwand Ruby selbst patchen und kompilieren mussten.

Ich muss ganz ehrlich sagen, wenn bei dir das Windows-Update nicht hilft, ist es einfacher sich nen Linux in einer virtuellen Maschine zu installieren und das weiter zu nutzen.

Sowohl Vagrant als auch Docker bieten da ein paar schöne fertige Boxen in ihren jeweiligen Hubs.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Error weg bekommen
BeitragVerfasst: 02 Apr 2017, 13:23 
Offline
Lehrling
Benutzeravatar

Registriert: 21 Sep 2016, 19:20
Beiträge: 57
Ich habe mal Steve Soltys, dem Macher vom DuckDuckGo Gem gefragt woran es liegen könnte und er sagte es liege nicht an seinem Gem sondern wohl eher an meiner Ruby Umgebung. Er verlinkte mir http://stackoverflow.com/a/7536952

Also habe ich mal ungefähr befolgt was da stand und es hat dann funktioniert als ich erst die cacert.pem Datei gedownloadet, irgendwo hin getan habe und dann in die Konsole bevor ich das Programm starte set SSL_CERT_FILE=C:\Users\LuckyChicken\Desktop\cacert.pem geschrieben. Und dann hat es funktioniert.

Nun ist das Problem aber dass ich immer wieder diesen Befehl neu schreiben muss wenn ich eine neue Terminal öffne und dann das Programm starten will. Also habe ich versucht den Befehl einfach am Anfang des Programmes mit der system Methode auszuführen. Allerdings ging das auch nicht!

Ich kann mir nicht erklären dass der Ruby Code


system "set SSL_CERT_FILE=C:\Users\LuckyChicken\Desktop\cacert.pem"

nicht funktioniert bei diesem Befehl. Wenn ich das mache macht er nichts und ich kriege wieder den Error obwohl es eigentlich das gleiche ist wenn ich den Befehl direkt Manuell eingebe. Dann funktioniert es nämlich.

Was soll ich jetzt tuen? Gibt es da irgendwelche "Tricks"?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Error weg bekommen
BeitragVerfasst: 02 Apr 2017, 20:48 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Benutze dafür Rubys Path#join oder verwende im String den Backslash doppelt. Das sollte funktionieren.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Error weg bekommen
BeitragVerfasst: 02 Apr 2017, 21:10 
Offline
Lehrling
Benutzeravatar

Registriert: 21 Sep 2016, 19:20
Beiträge: 57
Funktioniert nicht! Nichts von beidem funktioniert. Ich glaube Ruby fehlt irgendwie die Macht dazu. Irgendwie Administratoren Rechte. Aber wie?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Error weg bekommen
BeitragVerfasst: 02 Apr 2017, 21:27 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
OK, ich sehe erst jetzt, was das Kommando wirklich tut. Und zwar setzt es eine Umgebungsvariable. Diese gilt dann aber nur in dem Kontext der "Subshell". Sobald "system" fertig ist, wird diese Subshell wieder aufgeräumt.

Möglicherweise funktioniert folgendes, sehr früh in deinem Script:




ENV["SSL_CERT_FILE"] = File.join("C:", "Users", "LuckyChicken", "Desktop", "cacert.pem")


Nähere Informationen zu ENV::[]= findest du unter https://ruby-doc.org/core-2.4.0/ENV.html#method-c-5B-5D-3D.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Error weg bekommen
BeitragVerfasst: 02 Apr 2017, 22:04 
Offline
Lehrling
Benutzeravatar

Registriert: 21 Sep 2016, 19:20
Beiträge: 57
Danke! Funktioniert :D


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: