无法在Windows上安装Thin

65

我在Windows上无法安装thin gem。在构建本地扩展期间出现了一些问题。

有人遇到过同样的问题吗?

这是堆栈跟踪:

>gem install thin --no-ri --no-rdoc
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing thin:
        ERROR: Failed to build gem native extension.

C:/Ruby/bin/ruby.exe extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... no
checking for rb_thread_check_ints()... yes
checking for rb_time_new()... yes
checking for windows.h... yes
checking for winsock.h... yes
checking for main() in -lkernel32... yes
checking for main() in -lrpcrt4... yes
checking for main() in -lgdi32... yes
checking for main() in -lssl... no
creating Makefile

make
g++ -I. -IC:/Ruby/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby/include/ruby-1.9.1/ruby/backward -I/C/Ru
by/include/ruby-1.9.1 -I. -DBUILD_FOR_RUBY -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_TBR -DHAVE_RB_THR
EAD_CHECK_INTS -DHAVE_RB_TIME_NEW -DOS_WIN32 -DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -DWITHOUT_SSL -DHAVE_
MAKE_PAIR    -O3 -g -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -
Wno-missing-field-initializers -Wno-long-long   -o binder.o -c binder.cpp
In file included from project.h:137:0,
                 from binder.cpp:20:
binder.h:35:34: warning: type qualifiers ignored on function return type
In file included from project.h:138:0,
                 from binder.cpp:20:
em.h:91:47: warning: type qualifiers ignored on function return type
em.h:92:76: warning: type qualifiers ignored on function return type
em.h:93:56: warning: type qualifiers ignored on function return type
em.h:95:57: warning: type qualifiers ignored on function return type
em.h:96:60: warning: type qualifiers ignored on function return type
em.h:97:58: warning: type qualifiers ignored on function return type
em.h:98:55: warning: type qualifiers ignored on function return type
em.h:99:36: warning: type qualifiers ignored on function return type
em.h:101:47: warning: type qualifiers ignored on function return type
em.h:106:42: warning: type qualifiers ignored on function return type
em.h:123:45: warning: type qualifiers ignored on function return type
em.h:132:36: warning: type qualifiers ignored on function return type
In file included from project.h:145:0,
                 from binder.cpp:20:
eventmachine.h:45:61: warning: type qualifiers ignored on function return type
eventmachine.h:46:112: warning: type qualifiers ignored on function return type
eventmachine.h:47:69: warning: type qualifiers ignored on function return type
eventmachine.h:49:73: warning: type qualifiers ignored on function return type
eventmachine.h:62:75: warning: type qualifiers ignored on function return type
eventmachine.h:63:74: warning: type qualifiers ignored on function return type
eventmachine.h:64:77: warning: type qualifiers ignored on function return type
eventmachine.h:65:41: warning: type qualifiers ignored on function return type
In file included from project.h:145:0,
                 from binder.cpp:20:
eventmachine.h:99:60: warning: type qualifiers ignored on function return type
eventmachine.h:100:58: warning: type qualifiers ignored on function return type
eventmachine.h:102:60: warning: type qualifiers ignored on function return type
eventmachine.h:105:41: warning: type qualifiers ignored on function return type
g++ -I. -IC:/Ruby/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby/include/ruby-1.9.1/ruby/backward -I/C/Ru
by/include/ruby-1.9.1 -I. -DBUILD_FOR_RUBY -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_TBR -DHAVE_RB_THR
EAD_CHECK_INTS -DHAVE_RB_TIME_NEW -DOS_WIN32 -DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -DWITHOUT_SSL -DHAVE_
MAKE_PAIR    -O3 -g -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -
Wno-missing-field-initializers -Wno-long-long   -o cmain.o -c cmain.cpp
In file included from project.h:137:0,
                 from cmain.cpp:20:
binder.h:35:34: warning: type qualifiers ignored on function return type
In file included from project.h:138:0,
                 from cmain.cpp:20:
em.h:91:47: warning: type qualifiers ignored on function return type
em.h:92:76: warning: type qualifiers ignored on function return type
em.h:93:56: warning: type qualifiers ignored on function return type
em.h:95:57: warning: type qualifiers ignored on function return type
em.h:96:60: warning: type qualifiers ignored on function return type
em.h:97:58: warning: type qualifiers ignored on function return type
em.h:98:55: warning: type qualifiers ignored on function return type
em.h:99:36: warning: type qualifiers ignored on function return type
em.h:101:47: warning: type qualifiers ignored on function return type
em.h:106:42: warning: type qualifiers ignored on function return type
em.h:123:45: warning: type qualifiers ignored on function return type
em.h:132:36: warning: type qualifiers ignored on function return type
In file included from project.h:145:0,
                 from cmain.cpp:20:
eventmachine.h:45:61: warning: type qualifiers ignored on function return type
eventmachine.h:46:112: warning: type qualifiers ignored on function return type
eventmachine.h:47:69: warning: type qualifiers ignored on function return type
eventmachine.h:49:73: warning: type qualifiers ignored on function return type
eventmachine.h:62:75: warning: type qualifiers ignored on function return type
eventmachine.h:63:74: warning: type qualifiers ignored on function return type
eventmachine.h:64:77: warning: type qualifiers ignored on function return type
eventmachine.h:65:41: warning: type qualifiers ignored on function return type
In file included from project.h:145:0,
                 from cmain.cpp:20:
eventmachine.h:99:60: warning: type qualifiers ignored on function return type
eventmachine.h:100:58: warning: type qualifiers ignored on function return type
eventmachine.h:102:60: warning: type qualifiers ignored on function return type
eventmachine.h:105:41: warning: type qualifiers ignored on function return type
cmain.cpp:98:71: warning: type qualifiers ignored on function return type
cmain.cpp:109:122: warning: type qualifiers ignored on function return type
cmain.cpp:119:79: warning: type qualifiers ignored on function return type
cmain.cpp:129:83: warning: type qualifiers ignored on function return type
cmain.cpp:260:85: warning: type qualifiers ignored on function return type
cmain.cpp:270:84: warning: type qualifiers ignored on function return type
cmain.cpp:280:88: warning: type qualifiers ignored on function return type
cmain.cpp:290:51: warning: type qualifiers ignored on function return type
cmain.cpp:300:70: warning: type qualifiers ignored on function return type
cmain.cpp:320:55: warning: type qualifiers ignored on function return type
cmain.cpp:546:70: warning: type qualifiers ignored on function return type
cmain.cpp:669:68: warning: type qualifiers ignored on function return type
cmain.cpp: In function 'int evma_send_file_data_to_connection(long unsigned int, const char*)':
cmain.cpp:752:6: error: cannot convert 'stat*' to '_stati64*' for argument '2' to 'int _fstati64(int
, _stati64*)'
make: *** [cmain.o] Error 1


Gem files will remain installed in C:/Ruby/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10 for inspect
ion.
Results logged to C:/Ruby/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/ext/gem_make.out

1
我也遇到了同样的问题!我按照步骤操作,但是当我执行 thin start 命令时,出现了错误提示 No adapter found for C:/Ruby192/bin。请帮忙解决一下? - Zabba
我也遇到了同样的问题。 - gyurisc
请检查这个 https://github.com/eventmachine/eventmachine/issues/251 - Thillai Narayanan
如果您在Windows上运行,需要先安装devkit才能使用thin和eventmachine。详细的安装说明请参考https://github.com/oneclick/rubyinstaller/wiki/development-kit。 - liqian
6个回答

111

从git或rubygems存储库中安装不再适用于1.9.2或1.9.3(已确认在2012年6月22日仍然存在故障)。相反,您只需要:

gem install eventmachine --pre
gem install thin

请注意,2012年6月18日当前的预发布版本已更名为1.0.0.rc.1,因此很快将与Windows兼容的版本成为官方发布版,这将不再是一个问题。


如果您尝试从github存储库中的1.9.2版本构建gem,则可能会看到以下内容(包含用于搜索引擎命中的内容):

C:\eventmachine> rake build
(in C:/eventmachine)
cd ext
C:/Ruby/bin/ruby.exe extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... *** 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.

如果您尝试从rubygems存储库中的1.9.3版本安装gem,则可能会看到以下内容(包含用于搜索引擎命中的内容):

C:\>gem安装eventmachine时出错,报错信息为:
ERROR: Error installing eventmachine:
ERROR: Failed to build gem native extension.

Gem files will remain installed in C:/Ruby193/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10 for inspection.
Results logged to C:/Ruby193/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/ext/gem_make.out

具体的错误信息如下:
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
C:/Ruby193/bin/ruby.exe extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... no
checking for rb_thread_check_ints()... yes
checking for rb_time_new()... yes
checking for windows.h... yes
checking for winsock.h... yes
checking for main() in -lkernel32... yes
checking for main() in -lrpcrt4... yes
checking for main() in -lgdi32... yes
checking for main() in -lssl... no
creating Makefile

make
generating rubyeventmachine-i386-mingw32.def
compiling binder.cpp
cc1plus.exe: warning: command line option "-Wdeclaration-after-statement" is valid for C/ObjC but not for C++
cc1plus.exe: warning: command line option "-Wimplicit-function-declaration" is valid for C/ObjC but not for C++
In file included from binder.cpp:20:0:
project.h:85:0: warning: "FD_SETSIZE" redefined
:0:0: note: this is the location of the previous definition
……(省略部分内容)……
cmain.cpp:669:68: warning: type qualifiers ignored on function return type
cmain.cpp: In function 'int evma_send_file_data_to_connection(long unsigned int, const char*)':
cmain.cpp:752:6: error: cannot convert 'stat*' to '_stati64*' for argument '2' to 'int _fstati64(int, _stati64*)'
make: *** [cmain.o] Error 1

2
对我来说,唯一有效的解决方案是。然而,实际安装eventmachine的命令是:gem install eventmachine -v 1.0.0.beta.2 --pre - konung
1
在安装EventMachine时,我遇到了“无法将'stat *'转换为'_stati64 *'”错误,而“gem install eventmachine --pre”也解决了我的问题。非常感谢。 - cz3ch
5
简要说明这解决了我的问题。由于我想为所有的机器修复此问题,并且我正在编写一个rails应用程序,所以我在我的Gemfile中添加了以下内容:gem 'eventmachine','1.0.0.beta.4.1',:platforms => [:mswin, :mingw]- 我通过上面的安装获取了该版本号,并将该版本号复制过来。我使用gem list -r --pre eventmachine 进行了双重检查。 - Phantomwhale
1
gem install eventmachine --pre 解决了我安装 caldecott 的问题。谢谢。 - user644745
请注意,devkit的版本必须与ruby的版本兼容。请参阅devkit wiki https://github.com/oneclick/rubyinstaller/wiki/Development-Kit#requirements - mastaBlasta

6

首先,从RubyInstaller for Windows 网站安装DevKit(看起来您已经完成了这一步)。

然后按照Roger的说明从git存储库中单独安装eventmachine。

> gem install specific_install
Successfully installed backports-1.18.1
Successfully installed specific_install-0.2.3
2 gems installed
...
> gem specific_install -l http://github.com/eventmachine/eventmachine.git
git installing from http://github.com/eventmachine/eventmachine.git
...
Successfully built RubyGem
Name: eventmachine
Version: 0.12.11
File: eventmachine-0.12.11.gem
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed eventmachine-0.12.11
1 gem installed
...
successfully installed

然后,您应该能够从gem中安装thin。

> gem install thin
Temporarily enhancing PATH to include DevKit...
Successfully installed thin-1.2.7-x86-mingw32
1 gem installed 
...
> thin start
Using rack adapter
Thin web server (v1.2.7 codename No Hup)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop

1
特定的 gem install 命令 -l http://github.com/eventmachine/eventmachine.git ,需要从 Git Bash 中调用。在 Windows 控制台中无法正常工作。 - Alexey Zakharov

3

这将帮助您...

在您的Gem文件中添加以下行:

gem'eventmachine',:git => 'https://github.com/eventmachine/eventmachine.git'

然后运行bundle install


在我这里使用Win 7 x64和Ruby 2.0.0工作正常。 - DanT

3
尝试运行以下内容:
gem install thin –ignore-dependencies

如果失败,请重试安装rack和eventmachine,然后重新运行上述命令。
gem install rack
gem install eventmachine -l
gem install thin –ignore-dependencies

1

这可能会有所帮助:

$ gem install specific_install
$ gem specific_install -l http://github.com/eventmachine/eventmachine.git

0
您可以使用预构建的二进制文件安装Thin,无需自行构建,但需要知道哪些版本适用。要获取最新的预构建win32版本,请执行以下操作:
  1. 转到 RubyGems Thin页面
  2. 在“版本”部分查找右侧带有“x86-mswin32”的版本。(截至今天,版本1.2.11、1.2.10等都具有win32二进制文件)
  3. 使用包含“-v”标志的Thin版本运行以下“gem install”命令:

gem install thin -v 1.2.11

以下是我安装的结果:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接