2010-09-16 15 views
7

Per aggiornare Redmine, ho bisogno di SVN per eseguire il ping della nostra installazione Redmine dal nostro hook post-commit. Il nostro hook post-commit è uno script Ruby che genera un'email. Mi piacerebbe inserire una chiamata fare questo:Qual è la sintassi corretta per Ruby per eseguire una chiamata di sistema a curl?

curl --insecure https://redmineserver+webappkey

Questa chiamata funziona da linea di comando, ma quando provo a fare questo:

#!/usr/bin/ruby -w 

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

Non funziona. Come lo faccio in rubino? Ho cercato su google 'ruby system curl', ma ho appena ricevuto una serie di link per integrare curl in ruby ​​(che NON è quello a cui sono interessato).

+1

proposito: uso inutile di interpolazione stringa. –

risposta

4

Per un semplice problema così, non vorrei perdere tempo con sborsare per curl, mi piacerebbe semplicemente fare

require 'net/https' 

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

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

http.get('/') 

E per i problemi più complessi, mi piacerebbe ancora non sborsare per curl, ma piuttosto utilizzare uno dei tanti Ruby libcurl attacchi.

+0

Fare di questo la risposta dato che era la prima soluzione più vicina a quella che funzionava per me. Per chi è nuovo a Ruby, il primo argomento su HTTP.new() è l'URI del server. http.get() prende l'URL, a partire da/come argomento. – Avery

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

ci sono many ways

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

ma io non penso che si debba usare curl a tutti. Prova questo

require 'open-uri' 
open(REFRESH_DRADIS_URL) 

Se il certificato non è valido, allora diventa un po 'più complicato

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

Ho ricevuto questo errore. (StackOverflow non mi permette di stampare tutto, quindi ecco la "parte importante"). Attenzione: hook post-commit non riuscito (codice di uscita 1) con output: /usr/lib/ruby/1.8/net/http.rb:586:in 'connect ': SSL_connect restituito = 1 errno = 0 stato = server di lettura SSLv3 certificato B: verifica certificato non riuscita (OpenSSL :: SSL :: SSLError) – Avery

+0

Codice aggiunto per la gestione di certificati non validi. –

+0

'open (" # {REFRESH_DRADIS_URL} ")' potrebbe essere semplificato per 'open (REFRESH_DRADIS_URL)'. – eric

0

Ho dovuto fare questo recente e provato la seguente e ha funzionato:

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 
Problemi correlati