2009-10-02 13 views
8

Estoy tratando de hacer cargas de archivos con ruby ​​1.8 y parece que no hay buenas soluciones listas para usar. Todos parecen necesitar un parche de terceros o una bifurcación de un proyecto para funcionar. Usaría mechanize pero en realidad necesito interactuar con una API xml y mechanize parece estar hecho específicamente para tratar directamente con páginas web. Probé RestClient pero no tiene esa funcionalidad para formularios multiparte de fábrica, tienes que usar un tenedor del proyecto para que funcione. Situaciones similares parecen existir para Net: HTTP . Estoy pensando que el bordillo sería el camino a seguir, ya que de todos modos deseo usar multicurl para otras cosas que planeo hacer. Sin embargo, en mi máquina de Windows parece que no puedo instalar la joya del bordillo. joya install curb da un error al decir que necesito especificar dónde vive la biblioteca curl. He intentado pasar opciones a extconf pero hasta ahora no he tenido suerte. Aquí está la salida de la gema instalar acera sin ninguna opciónInstalar la gema Ruby Curb en 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 

Alguna idea de cómo puedo conseguir que esto funcione?

+0

Mi La solución final fue simplemente usar ruby ​​rest-client, que es totalmente compatible con la carga de archivos. Para obtener esto, simplemente agregue http://gems.github.com a sus fuentes (si no lo ha hecho) luego instale gem rest-client Desde allí puede hacer publicaciones de varias partes con tantos campos/archivos como desee. Ejemplo aquí: http://rdoc.info/projects/archiloque/rest-client Este cliente funciona muy bien, lo recomiendo encarecidamente. –

Respuesta

1

Como ya comenté, que no encontrar una solución que fue simplemente utilizando el resto cliente proporciona en las gemas de GitHub .. joya instalar resto -cliente conseguirá el trabajo hecho. Desde allí puede hacer una publicación de varias partes que puede contener 1 o más archivos. Tiene toda la flexibilidad que uno podría necesitar en un cliente de descanso. Consulte la documentación aquí: http://rdoc.info/projects/archiloque/rest-client para obtener ejemplos sobre cómo usarlo.

Lo único que encontré que no funcionó correctamente fue analizar las cookies. Las cookies que usa mi empresa pueden tener signos iguales en los valores y no los analiza correctamente. Hice algunas modificaciones para solucionar el problema, pero al final eso volvió a afectarme.Así que el otro día comencé a analizar el código de Mechanize/WEBrick y pude utilizar el CookieJar de Mechanize para administrar las cookies del cliente-resto. Espero poder hacer que el autor del cliente-resto cree esta funcionalidad en el resto-cliente para que otros usuarios no tendrán los mismos problemas que tenía ..

0

Cuando dice que pasó las opciones de configuración a extconf.rb, ¿quiso decir en el comando gem install?

Si no es así, creo que sería algo en la línea de

joya instalar acera - --with-curl-dir = dir

Podría ser una opción de configuración diferente, pero el - - Es ese bit lo que necesita para pasarle las opciones de configuración.

+0

El archivo README dice que pase opciones como esta: rake install EXTCONF_OPTS = '- with-curl-dir =/ruta/a/libcurl --prefix =/what/ever' Así que hice algo similar: rake install EXTCONF_OPTS = '- with-curl-dir = c:/curl' Intenté algunas variaciones de esa sintaxis/comillas, y también intenté especificar explícitamente el uso de los campos con-curl-dir/con-curl-include en lugar de con -curl-dir No hay suerte, y no parece que mucha gente esté corriendo curl con ruby ​​en línea, por lo que puede no ser una buena opción (desafortunadamente) –

1

En cuanto a la cuestión subyacente que está tratando de resolver. Estaba buscando un cliente de varias publicaciones antes y pasé mucho tiempo probando gemas/herramientas diferentes. El único que encontré que funcionó satisfactoriamente fue Nick Siegers multipart-post gem

Fue muy fácil de usar, lo recomiendo encarecidamente.

Aquí es código de ejemplo que hice para mi prueba

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

No creo que esto permita la carga de múltiples archivos en una sola solicitud ¿lo hará? De lo contrario, parece una buena manera de cargar un solo archivo en una solicitud –

18

Matt,

he tenido problemas para instalar la gema acera en Windows antes. Al tratar de ver cómo otros resolvieron esto, me encontré con muchas preguntas y pocas soluciones. Tener que hacerlo de nuevo esta noche decidí documentar mis pasos y publicar los resultados: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

Lo siento por el blogspam, espero que esto sea útil para alguien.

Pete

+0

Recibo el error "opción no válida: --with-curl-lib". ¿Se puede hacer ahora cómo puedo solucionarlo? – demas

+0

Tengo esto también. La respuesta fue incluir un doble tablero adicional (-), es decir, una acera de instalación de gemas - - --with-curl-lib [...] (ver http://www.basson.at/blog/installing -curb-on-windows) – Ben

0

Ejecutar a continuación comando y sus obras

joya instalar acera --platform = mswin32

0

después de una gran cantidad de gasto de tiempo sobre ella , Me rindo ...

Las respuestas dadas anteriormente no funcionan para mí, y algunos de los enlaces "curl" están rotos, yo c ni siquiera se descarga desde el sitio web oficial.

Lo que quiero es bastante simple: instalar curb gem en cygwin.

Ahora cambié a VirtalBox e instalé un servidor Ubuntu en él. luego, lo instalo en 20 minutos sin ningún problema.

Por lo tanto, las personas que trabajan bajo cygwin, vamos a cambiar a la máquina virtual!

+0

Trabajar en una máquina virtual es demasiado lento en mi máquina. :) Aprendiendo Powershell y usando Ruby nativo en su lugar. –

4

En última instancia, en win7 con Ruby 1.9.1 lo siguiente trabajó para mí (donde los caminos necesitan ser actualizadas para reflejar la ubicación (y la versión) de su versión de rizo (que se puede obtener a través de 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" 

Esto tomó unos minutos en procesarse, así que tenga paciencia.

+1

Recibo el error "opción no válida: --with-curl-lib". ¿Se puede hacer ahora cómo puedo solucionarlo? – demas

+0

Ese error parece provenir de omitir el '- '... –

3

que utiliza la instalación de configuración de Evan en su respuesta con el binario libcurl correcta desde el asistente: http://curl.haxx.se/dlwiz/

joya instalar acera - --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"

Esto funcionó para mí en Win XP 64 bits .

Asegúrese de seleccionar libcurl con la descripción de ser el binario para el desarrollo del software libcurl.

+0

inicial. He intentado casi todo, y creo que no pude hacerlo funcionar debido a la versión I del curl que tenía, el asistente me dio Me gusta la versión de Windows de 32 bits, lo cual es extraño ya que estoy en Windows de 64 bits, pero funcionó para agradecerle por compartir el enlace con el asistente. – Ben

+0

Tuve que arrojar un "--platform = ruby" después del bordillo y mi número de versión era diferente, pero de lo contrario, esto funcionó para mí (frenar 0.8.6/Ruby 2.1.4/curl 7.39.0) – amenthes

0

Probé todas las soluciones anteriores y nada funcionó, me rendí pero afortunadamente me encontré con esta publicación http://jooglar.com/edely/content/installing-libcurl-ruby-windows y las instrucciones allí funcionaron perfectamente.

Estas son las direcciones, en caso de que la página web se va a pique:


1. Descargar el "libcurl" versión de la biblioteca
De http://curl.haxx.se/dlwiz/?type=lib

2. Instalar donde quiera , pero el camino no puede tener espacios.
Asegúrese de que al descomprimir el archivo, a encontrar los directorios “bin” y “incluyen”

3.Añadir el camino libcurl (que termina en/bin;) para el sistema PATH variable de
ADVERTENCIA: USO / EN LUGAR DE \ en el PATH. No hay espacios permitidos en el camino. Por ejemplo: C:/curl/curl-7.26.0-devel-mingw32/bin;

4. Instalación de la gema
ADVERTENCIA: vez más, utiliza / EN LUGAR DE \ en el PATH. Véase más arriba.

Comando de ejemplo: 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:. Tenga en cuenta la versión autónoma de ----with-... antes, esta fue una de gotcha para mí]

En este punto, debería funcionar. Funcionó para mí Si no lo hace, puede probar con el resto de las instrucciones:


Si esto no funciona, copie los archivos siguientes .dll al directorio de rubí/bin y ejecute de nuevo el comando anterior.

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

Además, si eso no funciona ... actualizar el DevKit y ejecutar de nuevo el comando anterior. Descarga la última versión y desde una consola vaya al directorio DevKit y ejecutar ruby dk.rb install --force

1

Para Windows 8 el comando fue:

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 

Y casi se instala. Ahora bien, hay de "referencia" indefinido advertencias/errores

+0

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

1

que funciona también en Windows 10 x64:

joya instalar acera - --with-curl-lib = "C:/Users/WindowsVM/binarios/curl-7.40.0-devel-mingw64/lib64" --with-curl-incluyen = "C: /Users/WindowsVM/binaries/curl-7.40.0-devel-mingw64/include"

Cuestiones relacionadas