8

我正在尝试使用 ruby​​ 1.8 进行文件上传,似乎没有好的开箱即用解决方案。他们似乎都需要一些 3rd 方补丁或项目的分支才能工作。我会使用 mechanize 但我实际上需要与 xml api 交互,而 mechanize 似乎是专门为直接处理网页而设计的。我试过 RestClient 但它没有开箱即用的多部分表单的功能,你必须使用项目的一个分支才能让它工作。Net:HTTP 似乎也存在类似的情况,我认为遏制将是可行的方法,因为无论如何我可能想在我计划做的其他一些事情上使用 multicurl。但是,在我的 Windows 机器上,我似乎无法安装遏制 gem。gem install cream 给出一个错误,说我需要指定 curl 库所在的位置..我' 已经尝试将选项传递给 extconf,但到目前为止还没有运气。这是 gem install 遏制的输出,没有任何选项

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

有什么想法可以让它发挥作用吗?

4

11 回答 11

18

马特,

我以前在 Windows 中安装路缘宝石时遇到了麻烦。在试图了解其他人如何解决这个问题时,我遇到了很多问题,但解决方案并不多。今晚必须再做一次,我决定记录我的步骤并发布结果: http ://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

很抱歉博客垃圾邮件,希望这对某人有用。

皮特

于 2010-07-06T04:55:33.670 回答
4

最终,在带有 ruby​​ 1.9.1 的 win7 中,以下内容对我有用(需要更新路径以反映 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"

这确实需要几分钟的时间来处理,所以请耐心等待。

于 2012-03-27T20:55:51.767 回答
3

我在他的回答中使用了 Evan 的安装配置以及来自向导的正确 libcurl 二进制文件:http: //curl.haxx.se/dlwiz/

宝石安装路边 -- --with-curl-lib="C:/curl/curl-7.21.1-devel-mingw32/bin" --with-curl-include="C:/curl/curl-7.21.1 -devel-mingw32/包括”

这在 win XP 64 位上对我有用。

确保选择 libcurl 并带有关于作为 libcurl 软件开发的二进制文件的描述。

于 2012-08-15T18:18:12.473 回答
1

查看您要解决的潜在问题。我之前一直在寻找一个 multipart-post 客户端,并花了很多时间尝试不同的 gems/tools。我发现唯一令人满意的是 Nick Siegers multipart-post gem

它使用起来非常简单,我强烈推荐它。

这是我为测试制作的示例代码

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
于 2009-10-04T09:36:33.530 回答
1

正如我已经评论的那样,我确实找到了一个解决方案,它只是使用 github gems 中提供的 rest-client .. gem install rest-client 将完成工作。从那里你可以做一个多部分的帖子,它可以包含一个或多个文件。它具有休息客户端可能需要的所有灵活性。 有关如何使用它的示例,请参阅此处的文档:http ://rdoc.info/projects/archiloque/rest-client。

我发现它唯一没有正确执行的是解析 cookie。我公司使用的 cookie 在值中可能有等号,并且无法正确解析它们。我已经采取了一些技巧来解决这个问题,但最终还是让我感到痛苦。所以就在前几天,我开始分析 Mechanize/WEBrick 的代码,并能够利用 Mechanize 的 CookieJar 来管理来自其余部分的 cookie -client .. 希望我可以让 rest-client 的作者将此功能构建到 rest-client 中,这样其他人就不会遇到我遇到的同样问题..

于 2010-08-23T05:47:57.260 回答
1

对于 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

它几乎可以安装。现在有“未定义的参考”警告/错误

于 2013-09-10T10:25:01.033 回答
1

这也适用于 Windows 10 x64:

宝石安装路边 -- --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"

于 2015-10-16T10:42:01.317 回答
0

当您说您将配置选项传递给 extconf.rb 时,您的意思是在 gem install 命令中吗?

如果不是,我相信这将是类似的东西

宝石安装遏制 -- --with-curl-dir=dir

它可能是一个不同的配置选项,但 -- 是您需要传递配置选项的那个位。

于 2009-10-04T03:56:59.737 回答
0

执行以下命令及其工作

宝石安装遏制--平台=mswin32

于 2010-09-22T20:41:09.683 回答
0

在花了很多时间之后,我放弃了......

上面给出的答案对我不起作用,并且一些“卷曲”链接已损坏,我什至无法从官方网站下载。

我想要的很简单:在 cygwin 上安装遏制 gem。

现在我切换到 VirtalBox,并在上面安装了一个 Ubuntu 服务器。然后,我在 20 分钟内安装它,没有任何问题。

所以,在 cygwin 下工作的人,让我们切换到虚拟机!

于 2011-10-12T01:59:26.793 回答
0

我尝试了上面所有的解决方案,但没有任何效果,我放弃了,但幸运的是,我后来偶然发现了这篇文章http://jooglar.com/edely/content/installing-libcurl-ruby-windows,那里的说明效果很好。

以下是指示,以防网站崩溃:



1.从http://curl.haxx.se/dlwiz/?type=lib下载“libcurl”版本的库

2. 安装在哪里,但路径不能有空格。
确保在解压缩文件时,找到“bin”和“include”目录</p>

3. 将 libcurl 路径(以 /bin; 结尾)添加到系统PATH变量
WARNING: USE /INSTEAD OF \in the PATH。路径中不允许有空格。例如: C:/curl/curl-7.26.0-devel-mingw32/bin;

4. 安装 gem
警告:再次,在 PATH 中使用/INSTEAD OF 。\往上看。

示例命令: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


[注意:注意--之前的独立--with-...,这对我来说是一个问题。]

在这一点上,它应该工作。它对我有用。如果没有,您可以尝试其余说明:


如果不起作用,请将以下.dll文件复制到 ruby​​/bin 目录并再次运行上一个命令。

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

此外,如果这不起作用...更新 DevKit 并再次运行上一个命令。下载最新版本并从控制台转到 DevKit 目录并运行 ruby dk.rb install --force

于 2013-06-23T16:31:08.670 回答