2014-03-24 39 views
3

管理平臺允許用戶在文件手動添加到文檔,我的目標是創建一個自動執行該方法。管理平臺/導軌 - 未定義的方法在發送POST數據

我用Wireshark手動添加了一個文件來獲取POST請求,我想在我的方法中重新創建以幫助我一點點(我不能張貼一些截圖(如果需要),我的聲望是太低)。

管理平臺官方網站提供的信息如何在此附上文件:http://www.redmine.org/projects/redmine/wiki/Rest_api#Attaching-files小時瀏覽網頁和格外的StackOverflow和here

於是,我終於寫了一個方法:

require 'net/http' 
require 'uri' 

uri = URI.parse("/uploads.js") 
http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' => 'application/octet-stream'}) 
request.body = File.new("/home/testFile.txt", 'rb') 
@response = http.request(request) 

由於在管理平臺介紹網站我在頭文件中指定了內容類型,並在正文請求中添加了文件。

現在我得到以下錯誤:

NoMethodError (undefined method `+' for nil:NilClass): 
/usr/local/lib/ruby/1.9.1/net/http.rb:1404:in `addr_port' 
/usr/local/lib/ruby/1.9.1/net/http.rb:1339:in `begin_transport' 
/usr/local/lib/ruby/1.9.1/net/http.rb:1315:in `transport_request' 
/usr/local/lib/ruby/1.9.1/net/http.rb:1293:in `request' 
rest-client (1.6.7) lib/restclient/net_http_ext.rb:51:in `request' 
/usr/local/lib/ruby/1.9.1/net/http.rb:1286:in `block in request' 
/usr/local/lib/ruby/1.9.1/net/http.rb:745:in `start' 
/usr/local/lib/ruby/1.9.1/net/http.rb:1284:in `request' 
rest-client (1.6.7) lib/restclient/net_http_ext.rb:51:in `request' 
plugins/redmine_reddrop/app/controllers/projectusers_controller.rb:360:in `addFile' 

編輯:

我更新了我的URI具有絕對的URL是這樣的:

uri = URI.parse("http://<server_IP_address>:3000/uploads.js") 

現在我發現了以下錯誤:

NoMethodError (undefined method `bytesize' for #<File:/home/testFile.txt>): 

您是否在我的方法中看到任何錯誤,或者您是否知道此錯誤來自哪裏?

注:我使用的軌道3.2.16和Ruby 1.9.3-P392

+1

你的URI只是一個文件名。當創建'Net :: HTTP'對象時,你正在調用它的端口。這可能是零,所以HTTP類_clould_無法正確地構建請求時提供的端口是零。 – KappaNossi

+0

請打印'uri.host'和'uri.port'分配'http'之前,如果這些都不是'nil'發佈他們的內容。 – Patru

+0

兩者都是'nil'。我應該自己定義這些變量嗎?我假設端口是80,主機是redmine.org? – Shredator

回答

1

據我所知,你不能使用相對URI所以你行

uri = URI.parse('/uploads.js') 

不能正確處理。 嘗試使用絕對網址!它可能會工作。

我相信,而不是

request.body = File.new(...) 

您應該使用

request.body = File.read(...) 
+0

我更新了我的URI是這樣的:'URI = URI.parse( 「HTTP:// :3000/uploads.js」)'因爲我正在一個遠程服務器上,我已經安裝了管理平臺和I」男收到另一個錯誤:'(未定義的方法'bytesize」爲#<文件:/home/testFile.txt>'的另一個問題是,如果有人安裝在他的管理平臺平臺我的插件代碼必須被修改,這就是爲什麼我把相對地址。 – Shredator

+0

您還可以找到另一種方式我覺得當前的URL。如果你是在一個控制器,例如你可以用'request.original_url' 我更新了我的答案 – Oxynum

+0

好吧,我不知道,謝謝。我會用新信息和新錯誤消息更新我的帖子。 – Shredator