乐者为王

Do one thing, and do it well.

Plugin not found

使用Ruby 1.8.7和Rails 2.3.5,每次执行script/plugin install命令都出现:

1
Plugin not found: [...]

无论使用何种协议,或是在末尾添加斜杠都不起作用。

出现这个问题的原因是因为Ruby 1.8.7是用mingw32编译的,可以通过ruby -v查看:

1
ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]

RUBY_PLATFORM的值是i386-mingw32-{version},而许多库在判断当前操作系统时是这么做的:

1
file.open(RUBY_PLATFORM.match(/mswin/) ? 'NUL', '/dev/null')

这些库只判断了RUBY_PLATFORM里是否含有mswin,如果没有就认为是*nix平台,从而使用/dev/null,结果可想而知,文件必然打开失败,于是就会出现上述错误。

解决方式(推荐使用第4种方式):

方法1:打开script/plugin文件加入一行RUBY_PLATFORM = 'mswin',运行时会打印一条警告说常量重新赋值,不过不影响使用。

方法2:卸载掉1.8.7,重新安装Ruby 1.8.6-p26,这个版本是使用VC6编译的,RUBY_PLATFORM的值是mswin,不会出现平台判断错误。

方法3:使用VC自己编译Ruby 1.8.7,确保RUBY_PLATFORM的值是mswin即可。

方法4:打开RUBY_GEMS/activesupport-2.3.5/lib/active_support/core_ext/kernel/reporting.rb,找到

1
stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')

将之修改以下代码即可

1
stream.reopen(RUBY_PLATFORM =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')

Comments