2012-06-28 69 views
3

我在問這個問題還提供了答案,因爲我很難弄清楚什麼地方出了問題,Google沒有太多幫助 - 但是,因爲這是StackOverflow,所以我確信有人會更有效地回答它或改進答案。爲什麼不能找到MIME類型的寶石(解包在供應商/寶石中)?

我需要升級爲我的工作Rails應用程序,它引入了兩個新的依賴,其中之一是mime-types寶石。在本地工作,我添加了以下行config/environment.rb

config.gem 'mime-types', :version => '1.17' 

對於我們的服務器上部署,這是必要的,以安裝在vendor/gems所有寶石的依賴,所以後來我安裝了mime-types寶石到當前RVM寶石有:

gem install mime-types --version 1.17 

...和解壓的一個版本是爲vendor/gems有:

rake gems:unpack 
rake gems:unpack:dependencies 

然而,在服務器上部署後,我發現,當rake db:migrate被運行,下面的錯誤出現,表明mime-types寶石找不到(堆棧跟蹤部分省略掉):

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。爲什麼不認爲在這種情況下安裝了寶石?

回答

4

一位同事幫我解決了這個問題:看來Rails希望vendor/gems中的所有寶石都有一個特定的佈局,這與mime-types不符合。解決的辦法是改變它指定mime-type的依賴添加:lib選項environment.rb行,應指定指示如何去創業板源的相對路徑:

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/

+0

如果您切換到使用捆綁器,這可能是一個好主意,您可以使用':path'選項獲得相同的結果。 – tadman

+0

@tadman你能更明確嗎?我將如何分階段。 – baash05

1

只是在Ruby文件中刪除require 'mime-types'

as mime-types建於紅寶石。你不需要安裝它的gem或者明確地包含它。

只是使用它。 這對我有用。

相關問題