2009-10-02 7 views
8

J'essaie de faire des téléchargements de fichiers avec ruby ​​1.8 et il semble qu'il n'y ait pas de bonnes solutions prêtes à l'emploi. Ils semblent tous avoir besoin d'un patch ou d'un fork d'un projet pour travailler. J'utiliserais mécaniser mais j'ai réellement besoin d'interface avec un api de xml et mécaniser semble être fait spécifiquement pour traiter directement des pages Web. J'ai essayé RestClient mais il n'a pas cette fonctionnalité pour les formulaires en plusieurs parties prêts à l'emploi, vous devez utiliser une fourche du projet pour le faire fonctionner. Des situations similaires semblent exister pour Net: HTTP Je pense que curb serait le chemin à parcourir puisque je peux vouloir utiliser multicurl de toute façon pour d'autres choses que je prévois de faire. Cependant, sur ma machine Windows je ne peux pas sembler installer la gemme de trottoir. gem install curb donne une erreur en disant que j'ai besoin de spécifier où vit la bibliothèque curl .. J'ai essayé de passer des options à extconf mais pas de chance jusqu'ici. Voici la sortie de gem install trottoir sans aucune optionInstaller Ruby Curb gem dans 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 

Toute idée comment je peux obtenir ce travail?

+0

Mon La solution finale consistait à utiliser ruby ​​rest-client, qui supporte tous les téléchargements de fichiers. Pour obtenir ceci, ajoutez simplement http://gems.github.com à vos sources (si ce n'est pas déjà fait), puis faites gem install rest-client De là, vous pouvez faire un post multi-parties avec autant de champs/fichiers que vous le souhaitez. Exemple ici: http://rdoc.info/projects/archiloque/rest-client Ce client fonctionne très bien, je le recommande vivement. –

Répondre

1

Comme je l'ai déjà fait remarquer, je l'ai trouver une solution qui utilisait simplement le reste client fourni dans les pierres précieuses GitHub .. gem install repos client va faire le travail. De là, vous pouvez faire un post multipart qui peut contenir un ou plusieurs fichiers. Il a toute la flexibilité dont on aurait besoin dans un client de repos. Voir la documentation ici: http://rdoc.info/projects/archiloque/rest-client pour des exemples sur la façon de l'utiliser.

La seule chose que j'ai trouvé qu'il n'a pas fait correctement était d'analyser les cookies. Les cookies que mon entreprise utilise peuvent avoir des signes égaux dans les valeurs et ne les analysent pas correctement. J'avais mis quelques hacks pour contourner le problème mais finalement ça m'est revenu pour me mordre ..Donc, l'autre jour, j'ai commencé à analyser le code de Mechanize/WEBrick et j'ai pu utiliser le CookieJar de Mechanize pour gérer les cookies du reste-client. J'espère que l'auteur du reste-client pourra construire cette fonctionnalité dans le reste client pour que les autres ne seront pas les mêmes problèmes que j'avais ..

0

Lorsque vous dites que vous avez passé les options de configuration à extconf.rb, vouliez-vous dire dans la commande gem install?

Sinon, je crois que ce serait quelque chose le long des lignes de

gem install trottoir - --with-curl-dir = dir

Il pourrait être une option de configuration différente, mais - - est ce bit que vous avez besoin de passer les options de configuration.

+0

Le fichier README dit de passer des options comme ceci: rake install EXTCONF_OPTS = '- avec-curl-dir =/chemin/vers/libcurl --prefix =/quoi/jamais' Donc j'ai fait quelque chose de similaire: rake install EXTCONF_OPTS = '- avec-curl-dir = c:/curl' J'ai essayé quelques variantes de cette syntaxe/guillemets, et j'ai aussi essayé de spécifier explicitement en utilisant les champs with-curl-dir/with-curl-include au lieu de -curl-dir Pas de chance, et il ne semble pas que beaucoup de gens courent avec ruby ​​en ligne donc ce n'est peut-être pas un bon choix (malheureusement) –

1

En regardant le problème sous-jacent que vous essayez de résoudre. Je cherchais un client multipart-post avant et passé beaucoup de temps à essayer différentes gemmes/outils. Le seul que j'ai trouvé qui a fonctionné satisfaisant était Nick Siegers multipart-post gem

C'était très simple à utiliser, je le recommande fortement.

est un exemple de code Ici je l'ai fait pour mon test

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

Je ne pense pas que cela permettra plusieurs téléchargements de fichiers dans une seule requête est-ce que cela va. Sinon, cela ressemble à un bon moyen de télécharger un seul fichier dans une requête –

18

Matt,

J'ai eu des difficultés à installer la pierre à vide dans Windows avant. En essayant de voir comment les autres avaient résolu cela, j'ai rencontré beaucoup de questions et pas beaucoup de solutions. Devoir le refaire ce soir, j'ai décidé de documenter mes pas et d'afficher les résultats: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

Désolé pour le blog, espérons que cela soit utile pour quelqu'un.

pete

+0

Je reçois une erreur "option invalide: --with-curl-lib". Peut être fais-tu maintenant comment puis-je le réparer? – demas

+0

J'ai ceci aussi. La réponse était d'inclure un double tiret supplémentaire (-), c.-à-d. Gem install curb - - --with-curl-lib [...] (voir http://www.basson.at/blog/installing -curb-on-windows) – Ben

0

Execute Ci-dessous commande et ses œuvres

gem install trottoir --platform = mswin32

0

après beaucoup de dépenses de temps là-dessus , J'abandonne ...

Les réponses données ci-dessus ne fonctionnent pas pour moi, et certains des liens "curl" sont brisés, je c même télécharger sur le site officiel. Ce que je veux est assez simple: installez gerb gem sur cygwin.

Maintenant, je suis passé à VirtalBox, et j'ai installé un serveur Ubuntu dessus. Ensuite, je l'installe en 20 minutes sans aucun problème. Donc, les gens qui travaillent sous cygwin, passons à Virtual Machine!

+0

Travailler dans une machine virtuelle est trop lent dans ma machine. :) Apprendre Powershell et utiliser Ruby natif à la place. –

4

En fin de compte, dans win7 rubis 1.9.1 qui suit a fonctionné pour moi (où les chemins doivent être mis à jour pour refléter l'emplacement (et version) de votre version boucle (qui peut être obtenu par 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" 

Cela a pris quelques minutes à traiter, alors soyez patient.

+1

Je reçois erreur "option invalide: --with-curl-lib". Peut être fais-tu maintenant comment puis-je le réparer? – demas

+0

Cette erreur semble provenir de l'omission de l'initiale '--' ... –

3

J'utilisé installer la configuration de Evan dans sa réponse avec le binaire libcurl correct de l'assistant: http://curl.haxx.se/dlwiz/

gem install trottoir - --with-curl-lib = "C: /curl/curl-7.21 .1-devel-mingw32/bin » --with-curl-include = "C: /curl/curl-7.21.1-devel-mingw32/include"

Cela a fonctionné pour moi sur Win XP 64 bits .

Assurez-vous de sélectionner libcurl avec la description sur le fait d'être le binaire pour le développement de logiciels libcurl.

+0

J'ai essayé à peu près tout, et je pense que je ne pouvais pas le faire fonctionner en raison de la version I de curl que j'avais, l'assistant a donné moi la version Windows 32 bits, ce qui est étrange que je suis sur les fenêtres 64 bits, mais cela a fonctionné en remerciement pour le partage du lien vers l'assistant! – Ben

+0

je devais lancer un "--platform = ruby" après le trottoir et mon numéro de version différait, mais sinon cela a fonctionné pour moi (freiner 0.8.6/Ruby 2.1.4/curl 7.39.0) – amenthes

0

J'ai essayé toutes les solutions ci-dessus et rien n'a fonctionné, j'ai abandonné mais heureusement je suis tombé plus tard sur ce poste http://jooglar.com/edely/content/installing-libcurl-ruby-windows et les instructions là fonctionnaient parfaitement.

Voici les directions, dans le cas où le site va ventre:


1. Téléchargez le "libcurl" version de la bibliothèque
De http://curl.haxx.se/dlwiz/?type=lib

2. Installer chaque fois , mais le chemin ne peut pas avoir d'espaces.
Assurez-vous que lorsque vous décompressez le fichier, vous trouverez les répertoires « bin » et « comprennent »

3.Ajouter le chemin libcurl (se terminant en/bin;) au système PATH variables
AVERTISSEMENT: UTILISATION DE / INSTEAD \ dans le PATH. Aucun espace autorisé dans le chemin. Par exemple: C:/curl/curl-7.26.0-devel-mingw32/bin;

4. Installez la gemme
AVERTISSEMENT: DE NOUVEAU, DE L'UTILISATION DE / INSTEAD \ dans le PATH. Voir au dessus.

commande Exemple: 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:. Notez le -- autonome avant --with-..., ce fut un Gotcha pour moi]

À ce stade, il devrait fonctionner. Cela a fonctionné pour moi. Si cela ne fonctionne pas, vous pouvez essayer le reste des instructions:


Si cela ne fonctionne pas, copiez les fichiers .dll suivants dans le répertoire ruby ​​/ bin et exécutez à nouveau la commande précédente.

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

En outre, si cela ne fonctionne pas ... mettre à jour le DevKit et exécutez à nouveau la commande précédente. Téléchargez la dernière version et à partir d'une console allez dans le répertoire DevKit et exécutez ruby dk.rb install --force

1

Pour Windows 8 la commande était:

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 

Et il installe presque. Maintenant, il y a des avertissements/erreurs "de référence" non défini

+0

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

1

Cela fonctionne aussi sous Windows 10 x64:

gem install trottoir - --with-curl-lib = "C:/Users/WindowsVM/binaires/curl-7.40.0-devel-mingw64/lib64" --with-curl-include = "C: /Users/WindowsVM/binaries/curl-7.40.0-devel-mingw64/include"