2010-09-16 24 views
7

Para actualizar Redmine, necesito que SVN haga ping a nuestra instalación de Redmine desde nuestro enganche post-commit. Nuestro gancho post-commit es un script de Ruby que genera un correo electrónico. Me gustaría insertar una llamada hacer esto:¿Cuál es la sintaxis correcta para que Ruby haga una llamada al sistema para curl?

curl --insecure https://redmineserver+webappkey

Esta llamada funciona desde la línea de comandos, pero cuando trato de hacer esto:

#!/usr/bin/ruby -w 

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

No funciona. ¿Cómo hago esto en ruby? Busqué en Google 'curly system curl', pero acabo de obtener un montón de enlaces para integrar curl en ruby ​​(que NO es lo que me interesa).

+1

Por cierto: el uso inútil de interpolación de cadenas. –

Respuesta

4

Para un problema tan simple, no me moleste con los bombardeos a cabo a curl, que había simplemente hacer

require 'net/https' 

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

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

http.get('/') 

Y para los problemas más complejos, me todavía no desembolsar a curl, sino más bien utilizar una de las muchas Ruby libcurl fijaciones.

+0

Haciendo de esto la respuesta, ya que fue la primera solución más cercana a la que funcionó para mí. Para gente nueva en Ruby, el primer argumento para HTTP.new() es el URI del servidor. http.get() toma la URL, comenzando desde/como argumento. – Avery

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

Hay many ways

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

pero yo no creo que haya que utilizar rizo en absoluto. Prueba este

require 'open-uri' 
open(REFRESH_DRADIS_URL) 

Si el certificado no es válido, se pone un poco más complicado

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

Tengo esto un error. (StackOverflow no me deja imprimir todo, así que aquí está la "parte importante"). Advertencia: el enganche post-commit falló (código de salida 1) con salida: /usr/lib/ruby/1.8/net/http.rb:586:in 'connect ': SSL_connect returned = 1 errno = 0 state = servidor de lectura SSLv3 certificado B: verificación de certificado fallida (OpenSSL :: SSL :: SSLError) – Avery

+0

Código agregado para el manejo de certificados no válidos. –

+0

'open (" # {REFRESH_DRADIS_URL} ")' podría simplificarse a 'abrir (REFRESH_DRADIS_URL)'. – eric

0

que tenía que hacer esto recientemente y probamos el siguiente y funcionó:

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 
Cuestiones relacionadas