2010-09-16 33 views
7

Để làm mới Redmine, tôi cần SVN để ping cài đặt Redmine của chúng tôi từ móc hậu cam kết của chúng tôi. Hook hậu cam kết của chúng tôi là một kịch bản Ruby tạo ra một email. Tôi muốn chèn một cuộc gọi làm điều này:Cú pháp đúng của Ruby để thực hiện cuộc gọi hệ thống là gì?

curl --insecure https://redmineserver+webappkey

gọi này hoạt động từ dòng lệnh nhưng khi tôi cố gắng để làm điều này:

#!/usr/bin/ruby -w 

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

Nó không làm việc. Làm thế nào để làm điều này trong ruby? Tôi googled 'ruby hệ thống curl' nhưng tôi chỉ có một loạt các liên kết để tích hợp curl thành ruby ​​(đó là KHÔNG những gì tôi quan tâm).

+1

Bằng cách: sử dụng vô dụng của chuỗi suy. –

Trả lời

4

Đối với một vấn đề đơn giản như vậy, tôi sẽ không bận tâm với bắn phá ra để curl, tôi muốn chỉ cần làm

require 'net/https' 

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

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

http.get('/') 

Và đối với những vấn đề phức tạp hơn, tôi muốn vẫn không bao ra để curl, nhưng thay vì sử dụng một trong nhiều Ruby libcurl ràng buộc.

+0

Làm cho câu trả lời này trở thành một câu trả lời vì nó là giải pháp đầu tiên gần nhất với giải pháp đã làm việc cho tôi. Đối với những người mới sử dụng Ruby, đối số đầu tiên cho HTTP.new() là URI của máy chủ. http.get() lấy URL, bắt đầu từ/làm đối số. – Avery

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

many ways

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

nhưng tôi không nghĩ rằng bạn phải sử dụng curl ở tất cả. Hãy thử điều này

require 'open-uri' 
open(REFRESH_DRADIS_URL) 

Nếu giấy chứng nhận không hợp lệ sau đó nó được một chút phức tạp hơn

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

Tôi nhận được lỗi này. (StackOverflow sẽ không cho phép tôi in toàn bộ nội dung, vì vậy đây là "phần quan trọng"). Cảnh báo: hook hậu cam kết không thành công (exit code 1) với output: /usr/lib/ruby/1.8/net/http.rb WEBC86:in 'connect ': SSL_connect trả về = 1 errno = 0 state = SSLv3 read server chứng chỉ B: xác minh chứng chỉ không thành công (OpenSSL :: SSL :: SSLError) – Avery

+0

Đã thêm mã để xử lý chứng chỉ không hợp lệ. –

+0

'mở (" # {REFRESH_DRADIS_URL} ")' có thể được đơn giản hóa thành 'mở (REFRESH_DRADIS_URL)'. – eric

0

tôi phải làm điều này thời gian gần đây và thử những điều sau đây và nó làm việc:

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 
Các vấn đề liên quan