2009-10-02 44 views
8

Tôi đang cố gắng tải lên tệp với ruby ​​1.8 và có vẻ như không có giải pháp nào tốt hơn. Tất cả họ dường như cần một số bản vá hoặc bản ngã của bên thứ ba của một dự án để làm việc. Tôi sẽ sử dụng cơ giới hóa nhưng tôi thực sự cần phải giao tiếp với một api xml và cơ giới hóa dường như được thực hiện cụ thể để xử lý trực tiếp với các trang web. Tôi đã thử RestClient nhưng nó không có chức năng cho các hình thức multipart ra khỏi hộp, bạn phải sử dụng một ngã ba của dự án để làm cho nó hoạt động. Tình huống tương tự dường như tồn tại cho Net: HTTP Tôi đang nghĩ lề đường sẽ là con đường để đi vì tôi có thể muốn sử dụng anyways multicurl cho một số những thứ khác tôi có kế hoạch để làm. Tuy nhiên, trên máy tính của tôi cửa sổ tôi dường như không thể cài đặt đá quý lề đường. đá quý cài đặt lề đường cho một lỗi nói rằng tôi cần phải xác định nơi mà các thư viện curl sống .. Tôi đã cố gắng đi qua các tùy chọn để extconf nhưng không có may mắn cho đến nay. Dưới đây là sản phẩm của gem install lề đường mà không cần bất kỳ tùy chọnCài đặt Ruby Curb gem trong windows XP

C:\ruby\lib\ruby\gems\1.8\gems\curb-0.5.4.0>gem install curb 
Building native extensions. This could take a while... 
ERROR: Error installing curb: 
     ERROR: Failed to build gem native extension. 

C:/ruby/bin/ruby.exe extconf.rb 
checking for curl-config... no 
checking for main() in curl.lib... no 
*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers. Check the mkmf.log file for more 
details. You may need configuration options. 

Provided configuration options: 
     --with-opt-dir 
     --without-opt-dir 
     --with-opt-include 
     --without-opt-include=${opt-dir}/include 
     --with-opt-lib 
     --without-opt-lib=${opt-dir}/lib 
     --with-make-prog 
     --srcdir=. 
     --curdir 
     --ruby=C:/ruby/bin/ruby 
     --with-curl-dir 
     --without-curl-dir 
     --with-curl-include 
     --without-curl-include=${curl-dir}/include 
     --with-curl-lib 
     --without-curl-lib=${curl-dir}/lib 
     --with-curllib 
     --without-curllib 
extconf.rb:12: Can't find libcurl or curl/curl.h (RuntimeError) 

    Try passing --with-curl-dir or --with-curl-lib and --with-curl-include 
    options to extconf. 


Gem files will remain installed in C:/ruby/lib/ruby/gems/1.8/gems/curb-0.5.4.0 for inspection. 
Results logged to C:/ruby/lib/ruby/gems/1.8/gems/curb-0.5.4.0/ext/gem_make.out 

Bất kỳ ý tưởng làm thế nào tôi có thể có được điều này để làm việc?

+0

giải pháp cuối cùng là chỉ cần sử dụng ruby ​​rest-client có hỗ trợ đầy đủ cho các tệp tải lên. Để có được điều này chỉ cần thêm http://gems.github.com vào các nguồn của bạn (nếu bạn chưa có) thì hãy cài đặt gem rest-client Từ đó bạn có thể tạo nhiều bài đăng với nhiều trường/tập tin tùy thích. Ví dụ ở đây: http://rdoc.info/projects/archiloque/rest-client Khách hàng này hoạt động tốt, rất khuyên bạn nên làm điều đó. –

Trả lời

1

Như tôi đã nhận xét đã có, tôi đã tìm thấy một giải pháp mà chỉ đơn giản bằng cách sử dụng phần còn lại-client được cung cấp trong đá quý github .. gem install phần còn lại-client sẽ hoàn thành công việc. Từ đó bạn có thể thực hiện một bài đăng nhiều phần có thể chứa 1 hoặc nhiều tệp .. Nó có tất cả sự linh hoạt mà người dùng có thể cần trong một khách hàng còn lại. Xem tài liệu tại đây: http://rdoc.info/projects/archiloque/rest-client để biết các ví dụ về cách sử dụng tài liệu.

Điều duy nhất tôi thấy rằng nó không hoạt động chính xác là phân tích cú pháp cookie. Các cookie mà công ty của tôi sử dụng có thể có các dấu hiệu bằng nhau trong các giá trị và nó không phân tích cú pháp chúng một cách chính xác. Tôi đã đưa vào một số hacks để có được xung quanh vấn đề nhưng cuối cùng đã trở lại để cắn tôi ..Vì vậy, chỉ một ngày khác tôi bắt đầu phân tích mã từ Mechanize/WEBrick và đã có thể sử dụng CookieJar từ Mechanize để quản lý cookie từ phần còn lại-khách hàng .. Hy vọng rằng tôi có thể nhận được tác giả của phần còn lại-khách hàng để xây dựng chức năng này vào phần còn lại-client để những người khác sẽ không có vấn đề tương tự tôi đã ..

0

Khi bạn nói bạn đã chuyển các tùy chọn cấu hình tới extconf.rb, ý của bạn là trong lệnh cài đặt gem?

Nếu không, tôi tin rằng nó sẽ là một cái gì đó dọc theo dòng của

gem install lề đường - with-curl-dir = dir

Nó có thể là một lựa chọn cấu hình khác nhau, nhưng - - đó là bit bạn cần phải vượt qua nó tùy chọn cấu hình.

+0

Tệp README nói để chuyển các tùy chọn như thế này: cào cài đặt EXTCONF_OPTS = '- với-curl-dir =/đường dẫn đến/libcurl --prefix =/what/ever' Vì vậy, tôi đã làm một việc tương tự: cào cài đặt EXTCONF_OPTS = '- with-curl-dir = c:/curl' Tôi đã thử một vài biến thể của cú pháp/dấu ngoặc kép đó và cũng cố gắng chỉ định rõ ràng việc sử dụng các trường có-curl-dir/with-curl-include thay vì -curl-dir Không may mắn, và có vẻ như không có nhiều người đang chạy curl với ruby ​​trực tuyến để nó có thể không phải là một lựa chọn tốt (không may) –

1

Nhìn vào vấn đề cơ bản bạn đang cố giải quyết. Tôi đã tìm kiếm một khách hàng đa-đăng bài trước và dành rất nhiều thời gian thử đá quý/công cụ khác nhau. Chỉ có một tôi thấy rằng đã làm việc thỏa đáng là Nick Siegers multipart-post gem

Nó rất dễ sử dụng, tôi khuyên bạn nên sử dụng nó.

Đây là mã mẫu tôi đã làm cho thử nghiệm của tôi

require "rubygems" 
require 'net/http/post/multipart' 

url = URI.parse('http://localhost:3000/mytest/1.xml') 
File.open("c:/temp/readme.txt") do |jpg| 
    req = Net::HTTP::Put::Multipart.new url.path, 
    "mytest[attachment]" => UploadIO.new(jpg, "text/plain", "c:/temp/readme.txt") 
    res = Net::HTTP.start(url.host, url.port) do |http| 
    http.request(req) 
    end 
    puts res.inspect 
end 
+0

Tôi không nghĩ rằng điều này sẽ cho phép nhiều tệp tải lên trong một yêu cầu duy nhất nó sẽ. Nếu không, có vẻ như một cách hay để tải lên một tệp trong một yêu cầu –

18

Matt,

Tôi đã cố khi cài đặt các viên ngọc lề đường trong Windows trước đó. Trong cố gắng để xem làm thế nào những người khác đã giải quyết điều này tôi đã gặp rất nhiều câu hỏi và không phải là rất nhiều giải pháp. Phải làm lại vào tối nay, tôi đã quyết định ghi lại các bước của mình và đăng kết quả: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

Xin lỗi vì blogspam, hy vọng điều này hữu ích cho ai đó.

pete

+0

Tôi gặp lỗi "tùy chọn không hợp lệ: --with-curl-lib". Có thể làm bạn bây giờ làm thế nào tôi có thể sửa chữa nó? – demas

+0

Tôi cũng có điều này. Câu trả lời là bao gồm một dấu gạch ngang kép (-), tức là cài đặt gem curb - - --with-curl-lib [...] (xem http://www.basson.at/blog/installing -cộng-trên-cửa sổ) – Ben

0

Execute Dưới lệnh và các công trình của mình

gem install lề đường --platform = mswin32

0

sau một rất nhiều chi tiêu thời gian vào nó , Tôi từ bỏ ...

Câu trả lời được đưa ra ở trên không có tác dụng đối với tôi và một số liên kết "curl" bị hỏng, tôi c thậm chí không tải xuống từ trang web chính thức.

những gì tôi muốn khá đơn giản: cài đặt curb gem trên cygwin.

Bây giờ tôi đã chuyển sang VirtalBox và cài đặt máy chủ Ubuntu trên đó. sau đó, tôi cài đặt nó trong 20 phút mà không có bất kỳ vấn đề.

Vì vậy, những người làm việc dưới Cygwin, hãy chuyển sang Máy ảo!

+0

Làm việc trong máy ảo quá chậm trong máy của tôi. :) Học Powershell và sử dụng Ruby bản địa để thay thế. –

4

Cuối cùng, trong win7 với ruby ​​1.9.1 sau đây từng làm việc cho tôi (nơi con đường cần phải được cập nhật để phản ánh vị trí (và phiên bản) của phiên bản curl của bạn (có thể thu được thông qua http://curl.haxx.se/download.html#Win32))

gem install curb -- --with-curl-lib="C:/curl/curl-7.21.1-devel-mingw32/bin" --with-curl-include="C:/curl/curl-7.21.1-devel-mingw32/include" 

Quá trình này mất vài phút để xử lý, vì vậy hãy kiên nhẫn.

+1

Tôi gặp lỗi "tùy chọn không hợp lệ: --with-curl-lib". Có thể làm bạn bây giờ làm thế nào tôi có thể sửa chữa nó? – demas

+0

Lỗi đó dường như đến từ việc bỏ qua '--' ban đầu ... –

3

tôi đã sử dụng cài đặt cấu hình Evan trong câu trả lời của mình với nhị phân libcurl đúng từ trình hướng dẫn: http://curl.haxx.se/dlwiz/

gem install lề đường - with-curl-lib = "C: /curl/curl-7.21 .1-devel-mingw32/bin" --with-curl-include = "C: /curl/curl-7.21.1-devel-mingw32/include"

này làm việc cho tôi trên win XP 64 bit .

Đảm bảo chọn libcurl với mô tả về là nhị phân để phát triển phần mềm libcurl.

+0

Tôi đã thử mọi thứ, và tôi nghĩ tôi không thể làm cho nó hoạt động vì phiên bản curl mà tôi có, thuật sĩ đã cho tôi phiên bản 32-bit của windows, thật kỳ quặc như tôi đang ở trên các cửa sổ 64-bit, nhưng nó hoạt động nhờ vào việc chia sẻ liên kết tới trình hướng dẫn! – Ben

+0

tôi phải ném vào "--platform = ruby" sau lề đường và số phiên bản của tôi khác nhau, nhưng nếu không điều này làm việc cho tôi (lề đường 0.8.6/Ruby 2.1.4/curl 7.39.0) – amenthes

0

Tôi đã thử tất cả các giải pháp ở trên và không có gì hiệu quả, tôi đã từ bỏ nhưng may mắn sau này tôi đã tình cờ gặp bài đăng này http://jooglar.com/edely/content/installing-libcurl-ruby-windows và hướng dẫn tại đó đã hoạt động hoàn hảo.

Here are the directions, trong trường hợp trang web đi bụng lên:


1. Tải "libcurl" phiên bản của thư viện
Từ http://curl.haxx.se/dlwiz/?type=lib

2. Cài đặt bất cứ nơi nào , nhưng con đường không thể có không gian.
Hãy chắc chắn rằng khi bạn giải nén tập tin, bạn tìm thấy các thư mục “bin” và “bao gồm”

3.Thêm đường dẫn libcurl (kết thúc bằng/bin;) vào hệ thống PATH biến
CẢNH BÁO: SỬ DỤNG / THAY \ trong PATH. Không có khoảng trống nào được phép trong đường dẫn. Ví dụ: C:/curl/curl-7.26.0-devel-mingw32/bin;

4. Cài đặt viên ngọc
CẢNH BÁO: LẠI, SỬ DỤNG / THAY \ trong PATH. Xem ở trên.

lệnh Ví dụ: gem install curb -- --with-curl-lib=C:/curl/curl-7.26.0-devel-mingw32/bin --with-curl-include=C:/curl/curl-7.26.0-devel-mingw32/include


[NB:. Lưu ý độc -- trước --with-..., đây là một Gotcha cho tôi]

Tại thời điểm này, nó sẽ làm việc. Nó làm việc cho tôi. Nếu không, bạn có thể thử các phần còn lại của hướng dẫn:


Nếu nó không hoạt động, sao chép .dll file sau vào thư mục ruby ​​/ bin và chạy lại lệnh trước đó.

  • libcurl.dll
  • libssl32.dll
  • libeay32.dll

Ngoài ra, nếu điều đó không làm việc ... cập nhật các devkit và chạy lại lệnh trước đó. Tải về phiên bản mới nhất và từ một giao diện điều khiển đi đến thư mục devkit và chạy ruby dk.rb install --force

1

Đối với Windows 8 lệnh là:

gem install curb -- --with-curl-lib=C:/Utils/curl-7.32.0-dev/lib64 --with-curl-include=C:/Utils/curl-7.32.0-dev/include 

Và nó gần như cài đặt. Bây giờ có những "tài liệu tham khảo không xác định" cảnh báo/lỗi

+0

Xem http://curl.haxx.se/docs/faq.html#Link_errors_when_building_libcur – rupweb

1

đó làm việc quá, trên Windows 10 x64:

gem install lề đường - with-curl-lib = "C:/Users/WindowsVM/nhị phân/curl-7.40.0-devel-mingw64/lib64 "--with-curl-include =" C: /Users/WindowsVM/binaries/curl-7.40.0-devel-mingw64/include "

Các vấn đề liên quan