2009-10-02 119 views
8

我正在尝试使用ruby 1.8进行文件上传,它似乎没有很好的开箱即用解决方案。他们似乎都需要某个项目的第三方补丁或分支才能工作。我会使用机械化,但我实际上需要与xml API进行接口,并且机械化似乎专门用于直接处理网页。我已经尝试了RestClient,但它没有为多部分表单开箱即用的功能,您必须使用项目的分支才能使其工作。对于Net似乎也有类似的情况:HTTP 我在想,因为我可能想要使用multicurl来处理其他一些我计划要做的事情,所以我认为应该是路由器。但是,在我的Windows机器上,我似乎无法安装路边宝石。 gem install curb给出了一个错误,说我需要指定curl库在哪里居住..我试过将选项传递给extconf,但目前为止没有运气。 这里是宝石的输出路边安装不带任何选项在Windows XP中安装Ruby Curb gem

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

My最终的解决方案就是使用ruby rest-client,它完全支持文件上传。为了得到这个,只需将http://gems.github.com添加到你的源代码(如果你还没有的话),然后执行gem install rest-client 从那里你可以用你想要的多个字段/文件做多部分文章。 。这里的例子:http://rdoc.info/projects/archiloque/rest-client 这个客户端很棒,强烈推荐它。 – 2010-07-06 18:32:55

回答

1

正如我已经发表了评论,我发现这是简单地使用在github上的宝石提供.. 创业板安装其他客户端 将完成这项工作,其余客户端的解决方案。 从那里你可以做一个多部分文章,其中可以包含1个或多个文件..它具有休息客户端可能需要的所有灵活性。 请参阅此处的文档:http://rdoc.info/projects/archiloque/rest-client 有关如何使用它的示例。

我发现它没有正确执行的唯一的事情是解析cookie。我公司使用的cookie在值中可以有相同的标志,并且不会正确解析它们。为了解决这个问题,我采取了一些措施,但最终还是回来咬我。所以就在前几天我开始分析来自Mechanize/WEBrick的代码,并且能够利用Mechanize中的CookieJar来管理来自其余客户端的cookie。希望我可以让剩下的客户端的作者将此功能构建到其余客户端,以便其他人不会有同样的问题,我有..

0

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

如果不是这样,我相信这将是沿着

宝石的安装路缘线的东西 - --with卷曲-DIR = DIR

这可能是一个不同的配置选项,但 - - 是否需要通过配置选项?

+0

自述文件说要传递这样的选项: 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 没有运气,也没有出现很多人在网上运行ruby,所以它可能不是一个好的选择(不幸的是) – 2009-10-06 19:01:49

1

看看你正试图解决的潜在问题。我之前正在寻找一个多客户端客户端,并花了很多时间尝试不同的宝石/工具。 我发现工作满意的唯一一个是尼克西格斯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 
+0

我不认为这将允许在单个请求中上传多个文件会吗。否则,它看起来像上传请求中的单个文件的好方法 – 2009-10-06 18:57:52

18

马特,

我已经收到您在Windows路边宝石了事发经过。在试图看看其他人如何解决这个问题时,我遇到了很多问题,而且没有很多解决方案。今晚我不得不再次这样做,我决定记录下我的步骤并发布结果: http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html

对不起博客垃圾,希望对某人有用。

皮特

+0

我得到错误“无效的选项:--with-curl-lib”。可能是你现在如何解决它? – demas 2012-11-13 18:34:51

+0

我也有这个。答案是包含一个额外的双破折号( - ),即gem install curb - --with-curl-lib [...](请参阅http://www.basson.at/blog/installing -curb-on-windows) – Ben 2014-07-12 10:00:26

0

执行以下命令及其作品

创业板安装路边--platform = mswin32

0
一个大量的时间花费就可以了之后

,我放弃了...

上面给出的答案对我不起作用,并且一些“卷曲”链接被打破,我c甚至不会从官方网站下载。

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

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

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

+0

在虚拟机上工作在我的机器上太慢了。 :)学习Powershell并使用本地Ruby代替。 – 2012-03-30 21:46:15

4

最终,与红宝石WIN7 1.9.1对我下面的工作(其中的路径需要进行更新,以反映您的卷曲版本的位置(和版本)(可通过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" 

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

+1

我得到错误“无效的选项:--with-curl-lib”。可能是你现在如何解决它? – demas 2012-11-13 18:36:09

+0

这个错误似乎来自省略最初的' - '... – 2013-01-09 18:35:32

3

我用埃文的安装配置在他的回答与向导正确的libcurl二进制:http://curl.haxx.se/dlwiz/

创业板安装路边 - --with-卷曲LIB =“C:/curl/curl-7.21 .1 devel的-mingw32的/ bin中” --with-卷曲包括= “C:/curl/curl-7.21.1-devel-mingw32/include”

这为我工作在Win XP 64位。

请确保选择libcurl,其中包含有关作为libcurl软件开发的二进制文件的说明。

+0

我已经尝试了几乎所有的东西,并且我想我无法得到它的工作,因为我有卷发的版本,向导给了我的Windows 32位版本,这是奇怪的,因为我在64位窗口,但它的工作感谢分享链接到向导! – Ben 2012-10-19 11:42:13

+0

在路边和我的版本号不同之后,我不得不抛出“--platform = ruby​​”,但除此之外,这对我有用(限制为0.8.6/Ruby 2.1.4/curl 7.39.0) – amenthes 2015-01-07 23:39:56

0

我试过以上所有的解决方案,没有任何工作,我放弃了,但幸运的是我后来偶然发现了这个职位http://jooglar.com/edely/content/installing-libcurl-ruby-windows和那里的指示完美。

这里有方向,万一网站开始倒闭了:


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

2.安装的地方,但路径不能有空格。
确保当你解压缩文件,你会发现目录中的“bin”和“包括”

3。添加的libcurl路径(在/ bin中结束)到系统PATH可变
警告: USE / INSTEAD OF \在PATH。路径中不允许有空格。例如: C:/curl/curl-7.26.0-devel-mingw32/bin;

4.安装宝石
警告: AGAIN,在路径中使用/ 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文件复制到红宝石/ bin目录,然后再次运行前面的命令。

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

而且,如果还是不行...更新的devkit,并再次运行前面的命令。下载最新版本,并从一个控制台去到的devkit目录并运行 ruby dk.rb install --force

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 

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

+0

请参见http:/ /curl.haxx.se/docs/faq.html#Link_errors_when_building_libcur – rupweb 2013-09-10 10:30:18

1

这工作过,在Windows 10 64:

创业板安装路边 - --with-卷曲LIB =“C:/用户/ WindowsVM/binaries/curl-7.40.0-devel-mingw64/lib64“--with-curl-include =”C:/Users/WindowsVM/binaries/curl-7.40.0-devel-mingw64/include“