8 Stimmen

Ruby Curb gem in Windows XP installieren

Ich versuche, Datei-Uploads mit Ruby 1.8 zu tun, und es scheint, wie es gibt keine gute Out-of-the-Box-Lösungen. Sie alle scheinen einige 3rd-Party-Patch oder Fork eines Projekts zu benötigen, um zu arbeiten. Ich würde Mechanize verwenden, aber ich brauche eigentlich eine Schnittstelle zu einer xml api und Mechanize scheint speziell für den Umgang direkt mit Webseiten gemacht werden. Ich habe versucht, RestClient, aber es hat nicht, dass die Funktionalität für mehrteilige Formulare aus der Box, müssen Sie einen Fork des Projekts verwenden, um es zu arbeiten. Ähnliche Situationen scheinen für Net:HTTP zu bestehen. Ich denke, dass Curb der richtige Weg wäre, da ich Multicurl sowieso für einige andere Dinge, die ich plane, verwenden möchte. Auf meinem Windows-Rechner kann ich jedoch das curb gem nicht installieren. gem install curb gibt eine Fehlermeldung aus, die besagt, dass ich angeben muss, wo sich die curl-Bibliothek befindet. Ich habe versucht, Optionen an extconf zu übergeben, aber bisher ohne Erfolg. Hier ist die Ausgabe von gem install curb ohne jegliche Optionen

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

Haben Sie eine Idee, wie ich das zum Laufen bringen kann?

18voto

phiggy Punkte 868

Matt,

Ich hatte schon einmal Probleme bei der Installation des Curb Gems unter Windows. Bei der Suche nach Lösungen für dieses Problem stieß ich auf viele Fragen und nicht sehr viele Lösungen. Da ich es heute Abend wieder tun muss, beschloss ich, meine Schritte zu dokumentieren und die Ergebnisse zu veröffentlichen: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

Entschuldigung für den Blogspam, ich hoffe, dass dies für jemanden nützlich ist.

pete

4voto

Evan Punkte 785

Letztendlich funktionierte bei mir unter Win7 mit Ruby 1.9.1 folgendes (wobei die Pfade aktualisiert werden müssen, um den Speicherort (und die Version) Ihrer Curl-Version widerzuspiegeln (die Sie über 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"

Die Bearbeitung hat ein paar Minuten gedauert, haben Sie also etwas Geduld.

3voto

JimBtek Punkte 106

Ich habe die Installationskonfiguration von Evan in seiner Antwort mit der korrekten libcurl-Binärdatei aus dem Assistenten verwendet: http://curl.haxx.se/dlwiz/

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"

Das hat bei mir unter Win XP 64 Bit funktioniert.

Stellen Sie sicher, dass Sie libcurl mit der Beschreibung auswählen, dass es sich um die Binärdatei für die libcurl-Softwareentwicklung handelt.

1voto

Mikael R Punkte 11

Betrachten Sie das zugrunde liegende Problem, das Sie zu lösen versuchen. Ich war auf der Suche nach einem Multpart-Post-Client und habe eine Menge Zeit damit verbracht, verschiedene Gems/Tools auszuprobieren. Der einzige, der zufriedenstellend funktionierte, war Nick Siegers multipart-post gem

Es war sehr einfach zu bedienen, ich kann es nur empfehlen.

Hier ist Beispielcode, den ich für meinen Test gemacht habe

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

1voto

Matt Wolfe Punkte 8760

Wie ich bereits kommentiert, habe ich eine Lösung gefunden, die einfach mit dem Rest-Client in der Github-Gems bereitgestellt wurde. gem install rest-client wird die Arbeit erledigen. Von dort aus können Sie eine mehrteilige Post tun, die 1 oder mehrere Dateien enthalten kann. Es hat alle die Flexibilität, die man in einem rest-client brauchen könnte. Siehe die Dokumentation hier: http://rdoc.info/projects/archiloque/rest-client für Beispiele zu seiner Verwendung.

Das Einzige, was nicht richtig funktionierte, war das Parsen von Cookies. Die Cookies, die mein Unternehmen verwendet, können Gleichheitszeichen in den Werten haben, und das Programm analysiert sie nicht richtig. Ich hatte ein paar Hacks eingebaut, um das Problem zu umgehen, aber das hat mich schließlich wieder eingeholt. Also habe ich neulich angefangen, den Code von Mechanize/WEBrick zu analysieren und konnte das CookieJar von Mechanize nutzen, um Cookies vom Rest-Client zu verwalten Hoffentlich kann ich den Autor des Rest-Clients dazu bringen, diese Funktionalität in den Rest-Client einzubauen, damit andere nicht die gleichen Probleme haben, die ich hatte

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X