我正在尝试使用ruby 1.8进行文件上传,似乎没有好的开箱即用的解决方案。他们似乎都需要一些第三方补丁或项目的分支才能工作。我会使用机械化,但实际上我需要与xml api接口,而机械化似乎专门用于直接处理网页。我已经尝试过RestClient,但它没有开箱即用的多部分表单的功能,你必须使用项目的分支才能使它工作。 Net:HTTP似乎也存在类似的情况 我认为遏制是可行的方法,因为我可能想要使用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
我有什么想法可以让它发挥作用吗?
答案 0 :(得分:18)
马特,
我以前在Windows中安装curb gem时遇到了麻烦。在试图了解别人如何解决这个问题时,我遇到了很多问题而不是很多解决方案。今晚必须再做一次我决定记录我的步骤并发布结果: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html
对于blogspam感到抱歉,希望这对某些人有用。
皮特
答案 1 :(得分:4)
最终,在带有ruby 1.9.1的win7中,以下对我有效(需要更新路径以反映您的卷曲版本的位置(和版本)(可以通过http://curl.haxx.se/download.html#Win32获得))< / p>
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"
这需要几分钟的时间来处理,所以请耐心等待。
答案 2 :(得分:3)
我在回答中使用了Evan的安装配置,并使用了向导中正确的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 /包括“
这对我来说在win 64 64位上有用。
确保选择libcurl,其中包含有关libcurl软件开发的二进制文件的描述。
答案 3 :(得分:1)
查看您尝试解决的潜在问题。之前我一直在寻找一个多部门的客户端,并花了很多时间尝试不同的宝石/工具。 我发现唯一一个令人满意的是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
答案 4 :(得分: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中,以便其他人不会遇到同样的问题..
答案 5 :(得分: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
它几乎安装了。现在有“未定义的引用”警告/错误
答案 6 :(得分:1)
这也适用于Windows 10 x64:
gem install curb - --with-curl-lib =“C:/Users/WindowsVM/binaries/curl-7.40.0-devel-mingw64/lib64”--with-curl-include =“C:/用户/ WindowsVM /二进制/卷曲7.40.0-devel的-mingw64 /包括“
答案 7 :(得分:0)
当你说你将配置选项传递给extconf.rb时,你的意思是在gem install命令中吗?
如果没有,我相信它会像
那样gem install curb - --with-curl-dir = dir
它可能是一个不同的配置选项,但是 - 你需要通过它来配置选项。
答案 8 :(得分:0)
执行以下命令及其工作
gem install curb --platform = mswin32
答案 9 :(得分:0)
上面给出的答案对我不起作用,有些“卷曲”链接坏了,我甚至无法从官方网站下载。
我想要的很简单:在cygwin上安装curb gem。
现在我切换到VirtalBox,并在其上安装了Ubuntu服务器。然后,我在20分钟内安装它没有任何问题。
所以,在cygwin下工作的人们,让我们切换到虚拟机!
答案 10 :(得分:0)
我尝试了上面的所有解决方案,没有任何效果,我放弃了,但幸运的是我后来偶然发现了这篇文章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
变量
警告:在路径中使用/
INSTEAD OF \
。路径中不允许有空格。例如:
C:/curl/curl-7.26.0-devel-mingw32/bin;
<强> 4。安装宝石
警告:再次在路径中使用/
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