2009-10-02 12 views
8

Próbuję wgrać plik z ruby ​​1.8 i wygląda na to, że nie ma dobrych, gotowych rozwiązań. Wydaje się, że do działania potrzebna jest łatka lub rozwidlenie projektu innej firmy. Używałbym mechanize, ale faktycznie potrzebuję interfejsu z api XML i mechanize wydaje się być stworzona specjalnie do czynienia bezpośrednio ze stronami internetowymi. Próbowałem już RestClient, ale nie ma tej funkcjonalności dla wieloczęściowych formularzy po wyjęciu z pudełka, musisz użyć widelca projektu, aby go uruchomić. Podobne sytuacje wydają się istnieć dla Net: HTTP Myślę, że krawężnik byłby drogą do zrobienia, ponieważ mogę chcieć używać multicurl i tak do innych rzeczy, które planuję zrobić. Jednak na moim komputerze z systemem Windows nie mogę zainstalować klejnotu krawężnika. gem install curb daje błąd mówiąc, że muszę określić, gdzie znajduje się biblioteka curl. Próbowałem przekazywać opcje do extconf, ale bez powodzenia. Oto wyjściowy gem install krawężnika bez opcjiZainstaluj klejnot Ruby Curb w 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 

Wszelkie pomysły jak mogę uzyskać to do pracy?

+0

My ostatecznym rozwiązaniem było użycie ruby-klienta-klienta, który ma pełną obsługę przesyłania plików. Aby to zrobić, po prostu dodaj http://gems.github.com do swoich źródeł (jeśli jeszcze tego nie zrobiłeś), następnie zainstaluj reszta klienta-gem, Z tego miejsca możesz utworzyć wieloczęściowy post z dowolną liczbą pól/plików. Przykład: http://rdoc.info/projects/archiloque/rest-client Ten klient działa świetnie, bardzo go polecam. –

Odpowiedz

1

Jak już zauważył, znalazłem rozwiązanie, które było po prostu za pomocą REST klienta przewidzianej w klejnotów GitHub .. gem install Rest-klienta dostanie pracę. Stamtąd można utworzyć wieloczęściowy post, który może zawierać 1 lub więcej plików. Ma całą elastyczność, jakiej można potrzebować w reszcie klienta. Zobacz dokumentację tutaj: http://rdoc.info/projects/archiloque/rest-client , aby zapoznać się z przykładami jej używania.

Jedyne, co odkryłem, że nie działało poprawnie, było parsowanie plików cookie. Ciasteczka, których używa moja firma, mogą mieć równe znaki w wartościach i nie analizują ich prawidłowo. Wprowadziłem kilka hacków, aby obejść ten problem, ale w końcu to wróciło, żeby mnie ugryźć ...Tak więc pewnego dnia zacząłem analizować kod z Mechanize/WEBrick i byłem w stanie wykorzystać CookieJar z Mechanize do zarządzania plikami cookie od reszty klienta. Mam nadzieję, że uda mi się przekonać autora reszty-klienta do zbudowania tej funkcjonalności w reszta-klient, tak aby inni nie będą mieli te same problemy miałem ..

0

Kiedy mówisz, że przekazałeś opcje konfiguracji do extconf.rb, miałeś na myśli polecenie instalowania klejnotów?

Jeśli nie, wierzę, że będzie to coś na wzór

gem install krawężnik - --with-curl-dir = reż

To może być inna opcja config, ale - - jest tym bitem, musisz przekazać to skonfigurować opcje.

+0

Plik README mówi, aby przekazać takie opcje: instalacja rake EXTCONF_OPTS = '- with-curl-dir =/path/to/libcurl --prefix =/what/ever' Zrobiłem coś podobnego: rake install EXTCONF_OPTS = '- with-curl-dir = c:/curl' Próbowałem kilku odmian tej składni/cudzysłowów, a także próbowałem jawnie określać, używając pól-curl-dir/with-curl-include zamiast z -curl-dir Bez powodzenia, a wygląda na to, że wiele osób nie kręci się z rubinem online, więc może nie być dobrym wyborem (niestety) –

1

Patrząc na podstawowy problem, który próbujesz rozwiązać. Szukałem wcześniej klienta z wieloma klientami i spędziłem mnóstwo czasu próbując różnych klejnotów/narzędzi. Jedynym znalezionym, który działał zadowalająco, był Nick Siegers multipart-post gem

To było bardzo proste w użyciu, bardzo polecam.

Oto przykładowy kod zrobiłem dla mojego testu

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

Nie sądzę, że pozwoli to na przesyłanie wielu plików w jednym żądaniu czy to będzie. W przeciwnym razie wygląda na dobry sposób na przesłanie pojedynczego pliku w żądaniu. –

18

Matt,

miałem problemy z zainstalowaniem gem krawężnika w systemie Windows przed. Próbując zobaczyć, jak inni to rozwiązali, natknąłem się na wiele pytań i niewiele rozwiązań. Musząc to zrobić jeszcze raz, postanowiłem udokumentować moje kroki i opublikować wyniki: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

Przepraszamy za blog, mam nadzieję, że jest to przydatne dla kogoś.

Pete

+0

Pojawia się błąd "Niepoprawna opcja: --with-curl-lib". Może być teraz, jak mogę to naprawić? – demas

+0

Mam to również. Odpowiedzią było dodanie dodatkowego podwójnego myślnika (-), np. Krawężnika instalacji gem - - --with-curl-lib [...] (patrz http://www.basson.at/blog/installing -curb-on-windows) – Ben

0

Wykonaj poniższe polecenia i jego dzieła

gem install krawężnika --platform = mswin32

0

po wielu spędzania czasu na nim , Poddaję się ...

Powyższe odpowiedzi nie działają dla mnie, a niektóre linki "curl" są zepsute, c nawet nie pobrać z oficjalnej strony internetowej.

to, czego chcę, jest całkiem proste: zainstaluj krawężnik na cygwin.

Teraz przełączyłem się na VirtalBox i zainstalowałem na nim serwer Ubuntu. następnie instaluję go w 20 minut bez żadnych problemów.

Tak więc, ludzie pracujący pod cygwin, przejdźmy do Virtual Machine!

+0

Praca w VM jest zbyt wolna w moim komputerze. :) Uczenie się Powershell i używanie natywnej Ruby zamiast. –

4

Ostatecznie w win7 z Ruby 1.9.1 Następujące pracował dla mnie (gdzie muszą być aktualizowane w celu odzwierciedlenia lokalizację (i wersji) swojego curl wersja (która może być uzyskana poprzez http://curl.haxx.se/download.html#Win32) ścieżki)

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" 

Przetwarzanie trwało kilka minut, więc należy zachować cierpliwość.

+1

Pojawia się błąd "Niepoprawna opcja: --with-curl-lib". Może być teraz, jak mogę to naprawić? – demas

+0

Ten błąd wydaje się pochodzić z pominięcia początkowego "-" ... –

3

użyłem zainstalować config Evana w swojej odpowiedzi z poprawną libcurl binarnego z kreatora: http://curl.haxx.se/dlwiz/

gem install krawężnik - --with-curl-lib = "C: /curl/curl-7.21 0,1-devel-mingw32/bin”--with-curl-include = "C: /curl/curl-7.21.1-devel-mingw32/include"

ten pracował dla mnie na Win XP 64 bit .

Upewnij się, że wybrałeś libcurl z opisem bycia binarnym dla tworzenia oprogramowania libcurl.

+0

Próbowałem prawie wszystkiego i myślę, że nie mogłem go uruchomić, ponieważ miałem wersję I z loków, które miałem, czarodziej dał ja wersja 32-bitowa systemu Windows, która jest dziwna, ponieważ jestem w 64-bitowych oknach, ale działało to dziękuję za udostępnienie łącza do kreatora! – Ben

+0

Musiałem rzucić "--platform = ruby" po krawężniku i mój numer wersji różnił się, ale poza tym to działało dla mnie (krawężnik 0.8.6/Ruby 2.1.4/curl 7.39.0) – amenthes

0

Wypróbowałem wszystkie powyższe rozwiązania i nic nie działało, zrezygnowałem, ale na szczęście natknąłem się na ten post http://jooglar.com/edely/content/installing-libcurl-ruby-windows i instrukcje tam działały idealnie.

Oto wskazówki, w przypadku, gdy strona idzie brzuch:


1. Pobierz "libcurl" wersja biblioteki
Od http://curl.haxx.se/dlwiz/?type=lib

2. Instalacja gdziekolwiek , ale ścieżka nie może zawierać spacji.
Pamiętaj, że kiedy rozpakować plik, można znaleźć katalogi „bin” i „obejmują”

3.Dodaj ścieżkę libcurl (kończący się w/bin;) do systemu PATH zmienną
UWAGA: USE / zamiast \ w ścieżce. Na ścieżce nie są dozwolone spacje. Na przykład: C:/curl/curl-7.26.0-devel-mingw32/bin;

4. Instalacja GEM
UWAGA: PONOWNIE UŻYWAĆ / zamiast \ w PATH. Patrz wyżej.

Przykładowe polecenie: 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. Uwaga samodzielna -- przed --with-..., był to dla mnie haczyka]

W tym momencie, to powinno działać. To zadziałało dla mnie. Jeśli nie, można spróbować resztę instrukcji:


Jeśli to nie zadziała, skopiuj następujące .dll pliki do katalogu ruby ​​/ bin i uruchom ponownie poprzednią komendę.

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

Ponadto, jeśli to nie zadziała ... zaktualizować DevKit i uruchom ponownie poprzednią komendę. Pobierz najnowszą wersję i od konsoli przejdź do katalogu DevKit i uruchomić ruby dk.rb install --force

1

dla Windows 8 komenda brzmiała:

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 

I to prawie instaluje. Teraz istnieją "niezdefiniowana odniesienia" Ostrzeżenia/błędy

+0

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

1

To działa również w systemie Windows 10 x64:

gem install krawężnik - --with-curl-lib = "C:/Users/WindowsVM/binarne/zwijanie-7.40.0 devel-mingw64/lib64" -with zwijaniu obejmują = "C": /Users/WindowsVM/binaries/curl-7.40.0-devel-mingw64/include

Powiązane problemy