2010-09-16 7 views
7

Um Redmine zu aktualisieren, brauche ich SVN, um unsere Redmine-Installation von unserem Post-Commit-Hook aus zu pingen. Unser Post-Commit-Hook ist ein Ruby-Skript, das eine E-Mail generiert. Ich möchte ein Anruf diese einzufügen tun:Was ist die richtige Syntax für Ruby, um einen Systemaufruf zu machen?

curl --insecure https://redmineserver+webappkey

Dieser Aufruf funktioniert über die Befehlszeile, aber wenn ich versuche, dies zu tun:

#!/usr/bin/ruby -w 

REFRESH_DRADIS_URL = "https://redmineserver+webappkey" 
system("/usr/bin/curl", "--insecure", "#{REFRESH_DRADIS_URL}") 

Es funktioniert nicht. Wie mache ich das in Ruby? Ich habe "Ruby System Curl" gegoogelt, aber ich habe gerade eine Reihe von Links, um Curl in Ruby zu integrieren (was NICHT das ist, woran ich interessiert bin).

+1

By the way: nutzlos Verwendung von String-Interpolation. –

Antwort

4

Für solch ein einfaches Problem, würde ich nicht mit Beschuss aus zu curl stören, würde ich einfach tun

require 'net/https' 

http = Net::HTTP.new('redmineserver+webappkey', 443) 

http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

http.get('/') 

Und für komplexere Probleme, ich würde noch nicht curl berappen, sondern eine der vielen verwenden Rubin libcurl Bindungen.

+0

Dies ist die Antwort, da es die erste Lösung war, die derjenigen am nächsten kam, die für mich funktionierte. Für Leute, die neu in Ruby sind, ist das erste Argument für HTTP.new() der URI des Servers. http.get() übernimmt die URL, beginnend mit/als Argument. – Avery

6
system ("curl --insecure #{url}") 
7

Es gibt many ways

REFRESH_DRADIS_URL = "https://redmineserver+webappkey" 
result = `/usr/bin/curl --insecure #{REFRESH_DRADIS_URL}` 

aber ich glaube nicht, dass Sie auch alle curl verwenden. Versuchen Sie, diese

require 'open-uri' 
open(REFRESH_DRADIS_URL) 

Wenn das Zertifikat nicht gültig ist, dann wird es ein wenig komplizierter

require 'net/https' 
http = Net::HTTP.new("amazon.com", 443) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
resp, data = http.get("/") 
+0

Ich habe dies einen Fehler bekommen. (StackOverflow lässt mich nicht das ganze Ding drucken, also hier ist der "wichtige Teil"). Warnung: Post-Commit Hook fehlgeschlagen (Exit Code 1) mit Ausgabe: /usr/lib/ruby/1.8/net/http.rb:586:in 'connect ': SSL_connect zurückgegeben = 1 errno = 0 Zustand = SSLv3 Server lesen Zertifikat B: Zertifikatprüfung fehlgeschlagen (OpenSSL :: SSL :: SSLError) – Avery

+0

Zusätzlicher Code für die Behandlung ungültiger Zertifikate. –

+0

'open (" # {REFRESH_DRADIS_URL} ")' könnte zu 'open (REFRESH_DRADIS_URL)' 'vereinfacht werden. – eric

0

Ich hatte dies vor kurzem zu tun und versuchte, die folgende und es funktioniert:

test.rb

class CurlTest 
    def initialize() 
    end 
    def dumpCurl 
     test = `curl -v https://google.com 2>&1` 
     puts test 
    end 
end 

curlTest = CurlTest.new() 
curlTest.dumpCurl 
Verwandte Themen