Установите гем Ruby Curb в Windows XP

Я пытаюсь загружать файлы с помощью ruby ​​​​1.8, и кажется, что хороших готовых решений нет. Кажется, им всем нужен какой-то сторонний патч или форк проекта для работы. Я бы использовал mechanize, но на самом деле мне нужно взаимодействовать с xml API, а mechanize, похоже, создан специально для работы непосредственно с веб-страницами. Я пробовал RestClient, но у него нет такой функциональности для составных форм из коробки, вам нужно использовать форк проекта, чтобы заставить его работать. Похоже, что аналогичные ситуации существуют для Net: HTTP. Я думаю, что curb будет подходящим вариантом, поскольку я все равно захочу использовать multicurl для некоторых других вещей, которые я планирую делать. Однако на моей машине с Windows я не могу установить бордюрный камень. gem install curb выдает ошибку, говорящую, что мне нужно указать, где находится библиотека curl. Я пробовал передавать параметры в extconf, но пока безуспешно. Вот вывод gem install curb без каких-либо опций

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

Любые идеи, как я могу заставить это работать?


person Matt Wolfe    schedule 02.10.2009    source источник
comment
Мое окончательное решение состояло в том, чтобы просто использовать ruby ​​rest-client, который полностью поддерживает загрузку файлов. Чтобы получить это, просто добавьте gems.github.com в свои источники (если вы еще этого не сделали), а затем выполните команду gem установить rest-client Оттуда вы можете сделать составную публикацию с любым количеством полей/файлов. Пример здесь: rdoc.info/projects/archiloque/rest-client Этот клиент отлично работает, очень рекомендую его.   -  person Matt Wolfe    schedule 06.07.2010


Ответы (11)


Мэтт,

Раньше у меня были проблемы с установкой curb gem в Windows. Пытаясь увидеть, как другие решили эту проблему, я столкнулся с множеством вопросов и не очень много решений. Чтобы сделать это снова сегодня вечером, я решил задокументировать свои шаги и опубликовать результаты: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

Извините за спам в блоге, надеюсь кому-нибудь пригодится.

Пит

person phiggy    schedule 06.07.2010
comment
Я получаю сообщение об ошибке недопустимой опции: --with-curl-lib. Может быть, вы сейчас, как я могу это исправить? - person demas; 13.11.2012
comment
У меня это тоже есть. Ответ заключался в том, чтобы добавить дополнительный двойной дефис (--), т. е. установить драгоценный камень -- -- --with-curl-lib[...] (см. basson.at/blog/installing-curb-on-windows) - person Ben; 12.07.2014

В конечном счете, в win7 с ruby ​​1.9.1 у меня сработало следующее (где необходимо обновить пути, чтобы отразить местоположение (и версию) вашей версии curl (которую можно получить через 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"

Это заняло несколько минут, так что наберитесь терпения.

person Evan    schedule 27.03.2012
comment
Я получаю сообщение об ошибке недопустимой опции: --with-curl-lib. Может быть, вы сейчас, как я могу это исправить? - person demas; 13.11.2012

Я использовал конфигурацию установки Эвана в его ответе с правильным двоичным файлом libcurl из мастера: 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"

Это сработало для меня на Win XP 64 бит.

Обязательно выберите libcurl с описанием того, что это двоичный файл для разработки программного обеспечения libcurl.

person JimBtek    schedule 15.08.2012
comment
Я перепробовал почти все, и я думаю, что не смог заставить его работать из-за версии curl, которая у меня была, мастер дал мне 32-битную версию Windows, что странно, поскольку я на 64- бит виндовс, но заработало спасибо что поделились ссылкой на мастера! - person Ben; 19.10.2012
comment
мне пришлось добавить --platform=ruby после того, как бордюр и мой номер версии отличались, но в остальном это сработало для меня (curb 0.8.6 / Ruby 2.1.4 / curl 7.39.0) - person amenthes; 08.01.2015

Глядя на основную проблему, которую вы пытаетесь решить. Раньше я искал многопартийный почтовый клиент и потратил много времени, пробуя разные драгоценные камни/инструменты. Единственное, что я нашел удовлетворительным, это Nick Siegers жемчуг multipart-post

Это было очень просто в использовании, я очень рекомендую его.

Вот пример кода, который я сделал для своего теста

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
person Mikael R    schedule 04.10.2009
comment
Я не думаю, что это позволит загружать несколько файлов в одном запросе. В противном случае это выглядит как хороший способ загрузить один файл в запросе. - person Matt Wolfe; 06.10.2009

Как я уже прокомментировал, я нашел решение, которое просто использовало rest-client, предоставленный в драгоценных камнях github. gem install rest-client выполнит свою работу. Оттуда вы можете сделать составной пост, который может содержать 1 или более файлов. Он обладает всей гибкостью, которая может понадобиться в клиенте для отдыха. См. документацию здесь: http://rdoc.info/projects/archiloque/rest-client для примеров того, как его использовать.

Единственное, что я обнаружил, что он не делал правильно, это анализ файлов cookie. Файлы cookie, которые использует моя компания, могут иметь знаки равенства в значениях, и они не анализируются правильно. Я применил несколько хаков, чтобы обойти эту проблему, но в конце концов это снова меня укусило. Итак, буквально на днях я начал анализировать код из Mechanize/WEBrick и смог использовать CookieJar из Mechanize для управления куки-файлами из остальных. -client.. Надеюсь, я смогу заставить автора rest-client встроить эту функциональность в rest-client, чтобы у других не было тех же проблем, что и у меня..

person Matt Wolfe    schedule 23.08.2010

Для Windows 8 команда была:

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

И он почти устанавливается. Теперь есть предупреждения/ошибки "неопределенная ссылка"

person rupweb    schedule 10.09.2013

Это тоже работает в Windows 10 x64:

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

person Sylvain Pélissier    schedule 16.10.2015

Когда вы говорите, что передали параметры конфигурации в extconf.rb, вы имели в виду команду установки gem?

Если нет, я думаю, что это было бы что-то вроде

gem установить бордюр -- --with-curl-dir=dir

Это может быть другой параметр конфигурации, но -- это тот бит, который вам нужно передать для параметров конфигурации.

person Robert Rouse    schedule 04.10.2009
comment
В файле README говорится, что нужно передавать такие параметры: rake install EXTCONF_OPTS='--with-curl-dir=/path/to/libcurl --prefix=/what/ever' Так что я сделал нечто подобное: rake install EXTCONF_OPTS='- -with-curl-dir=c:/curl' Я попробовал несколько вариантов этого синтаксиса/кавычек, а также попытался указать явно, используя поля with-curl-dir/with-curl-include вместо with-curl-dir Не повезло , и не так много людей используют curl с рубином онлайн, так что это может быть не очень хороший выбор (к сожалению) - person Matt Wolfe; 06.10.2009

Команда «Выполнить ниже» и ее работа

gem установить бордюр --platform=mswin32

person AMIC MING    schedule 22.09.2010

после того, как я потратил на это много времени, я сдаюсь...

Ответы, приведенные выше, у меня не работают, а некоторые ссылки «curl» не работают, я даже не могу скачать с официального сайта.

то, что я хочу, довольно просто: установить curb gem на cygwin.

Теперь я перешел на VirtalBox и установил на него сервер Ubuntu. затем я устанавливаю его за 20 минут без каких-либо проблем.

Итак, люди, работающие под cygwin, давайте переключимся на виртуальную машину!

person Siwei    schedule 12.10.2011
comment
Работа в виртуальной машине на моей машине слишком медленная. :) Изучение Powershell и использование родного Ruby. - person Andres Riofrio; 31.03.2012

Я пробовал все вышеперечисленные решения, и ничего не сработало, я сдался, но, к счастью, позже наткнулся на этот пост http://jooglar.com/edely/content/installing-libcurl-ruby-windows и инструкции там работали отлично.

Вот инструкции на случай, если сайт рухнет:


<сильный>1. Загрузите версию библиотеки "libcurl"
с http://curl.haxx.se/dlwiz/?type=lib

<сильный>2. Устанавливайте куда угодно, но в пути не должно быть пробелов.
Убедитесь, что при распаковке файла вы найдете каталоги «bin» и «include».

<сильный>3. Добавьте путь libcurl (оканчивающийся на /bin;) в системную переменную PATH
ВНИМАНИЕ: ИСПОЛЬЗУЙТЕ / ВМЕСТО \ в ПУТИ. В пути не допускаются пробелы. Например: C:/curl/curl-7.26.0-devel-mingw32/bin;

<сильный>4. Установите гем
ВНИМАНИЕ: СНОВА ИСПОЛЬЗУЙТЕ / ВМЕСТО \ в ПУТИ. См. выше.

Пример команды: 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: обратите внимание на автономный -- перед --with-..., для меня это было ошибкой.]

В этот момент он должен работать. Это сработало для меня. Если это не так, вы можете попробовать остальные инструкции:


Если это не работает, скопируйте следующие файлы .dll в каталог ruby/bin и снова запустите предыдущую команду.

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

Кроме того, если это не сработает... обновите DevKit и снова запустите предыдущую команду. Загрузите последнюю версию и из консоли перейдите в каталог DevKit и запустите ruby dk.rb install --force

person San Diago    schedule 23.06.2013