首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么找不到mime类型的gem (在供应商/宝石中解压缩)?

为什么找不到mime类型的gem (在供应商/宝石中解压缩)?
EN

Stack Overflow用户
提问于 2012-06-28 16:53:22
回答 2查看 3K关注 0票数 3

我问这个问题的目的也是为了给出答案,因为我很难搞清楚到底出了什么问题,而谷歌对此帮助不大--不过,既然这是StackOverflow,我肯定有人会更胜任地回答这个问题,或者改进答案。

我需要为我正在开发的rails应用程序升级一个gem,它引入了两个新的依赖项,其中一个是mime-types。在本地工作时,我在config/environment.rb中添加了下面一行

代码语言:javascript
复制
config.gem 'mime-types', :version => '1.17'

为了在我们的服务器上进行部署,必须在vendor/gems中安装所有的gem依赖项,因此我将mime-types gem安装到当前的rvm gem集中,其中包括:

代码语言:javascript
复制
gem install mime-types --version 1.17

..。并将其解压缩到vendor/gems中,并使用:

代码语言:javascript
复制
rake gems:unpack
rake gems:unpack:dependencies

但是,在服务器上部署之后,我发现在运行rake db:migrate时,出现了以下错误,表明无法找到mime-types gem (堆栈跟踪部分被省略):

代码语言:javascript
复制
no such file to load -- mime-types
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
[...]
/lib/tasks/misc.rake:4
/usr/lib/ruby/1.8/rake.rb:636:in `call'
/usr/lib/ruby/1.8/rake.rb:636:in `execute'
/usr/lib/ruby/1.8/rake.rb:631:in `each'
/usr/lib/ruby/1.8/rake.rb:631:in `execute'
/usr/lib/ruby/1.8/rake.rb:597:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib/ruby/1.8/rake.rb:590:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/rake.rb:607:in `invoke_prerequisites'
/usr/lib/ruby/1.8/rake.rb:604:in `each'
/usr/lib/ruby/1.8/rake.rb:604:in `invoke_prerequisites'
/usr/lib/ruby/1.8/rake.rb:596:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib/ruby/1.8/rake.rb:590:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/rake.rb:583:in `invoke'
/usr/lib/ruby/1.8/rake.rb:2051:in `invoke_task'
/usr/lib/ruby/1.8/rake.rb:2029:in `top_level'
/usr/lib/ruby/1.8/rake.rb:2029:in `each'
/usr/lib/ruby/1.8/rake.rb:2029:in `top_level'
/usr/lib/ruby/1.8/rake.rb:2068:in `standard_exception_handling'
/usr/lib/ruby/1.8/rake.rb:2023:in `top_level'
/usr/lib/ruby/1.8/rake.rb:2001:in `run'
/usr/lib/ruby/1.8/rake.rb:2068:in `standard_exception_handling'
/usr/lib/ruby/1.8/rake.rb:1998:in `run'
/usr/bin/rake:28
no such file to load -- mime-types
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
[...]
/lib/tasks/misc.rake:4
/usr/lib/ruby/1.8/rake.rb:636:in `call'
/usr/lib/ruby/1.8/rake.rb:636:in `execute'
/usr/lib/ruby/1.8/rake.rb:631:in `each'
/usr/lib/ruby/1.8/rake.rb:631:in `execute'
/usr/lib/ruby/1.8/rake.rb:597:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib/ruby/1.8/rake.rb:590:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/rake.rb:607:in `invoke_prerequisites'
/usr/lib/ruby/1.8/rake.rb:604:in `each'
/usr/lib/ruby/1.8/rake.rb:604:in `invoke_prerequisites'
/usr/lib/ruby/1.8/rake.rb:596:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib/ruby/1.8/rake.rb:590:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/rake.rb:583:in `invoke'
/usr/lib/ruby/1.8/rake.rb:2051:in `invoke_task'
/usr/lib/ruby/1.8/rake.rb:2029:in `top_level'
/usr/lib/ruby/1.8/rake.rb:2029:in `each'
/usr/lib/ruby/1.8/rake.rb:2029:in `top_level'
/usr/lib/ruby/1.8/rake.rb:2068:in `standard_exception_handling'
/usr/lib/ruby/1.8/rake.rb:2023:in `top_level'
/usr/lib/ruby/1.8/rake.rb:2001:in `run'
/usr/lib/ruby/1.8/rake.rb:2068:in `standard_exception_handling'
/usr/lib/ruby/1.8/rake.rb:1998:in `run'
/usr/bin/rake:28
Missing these required gems:
  mime-types = 1.17

You're running:
  ruby 1.8.7.302 at /usr/bin/ruby1.8
  rubygems 1.3.7 at /home/mark/.gem/ruby/1.8, /var/lib/gems/1.8

Run `rake gems:install` to install the missing gems.

然而,mime-types存在于vendor/gems/mime-types-1.17中。为什么rake不认为在这种情况下安装了gem呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-28 16:53:23

一位同事帮我解决了这个问题: Rails似乎希望vendor/gems中的所有宝石都有一个特定的布局,而mime-types不符合这个布局。解决方案是更改environment.rb中指定依赖于mime-type的行,以添加:lib选项,该选项应指定一个相对路径,该路径指示如何到达gem中的源:

代码语言:javascript
复制
config.gem 'mime-types', :version => '1.17', :lib => 'mime/types'

这意味着查看vendor/gems/mime-types-1.17/lib/mime/types,而不是基于宝石名称vendor/gems/mime-types-1.17/lib/mime-types/的缺省值。

票数 4
EN

Stack Overflow用户

发布于 2015-09-09 06:44:00

只需删除红宝石文件中的require 'mime-types'即可。

因为mime-types是用红宝石建造的。您不需要安装它的gem或显式地包含它。

就用它吧。这对我有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11249396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档