3

何が悪いのかを理解するのに苦労し、Googleはあまり役に立たなかったので、私は答えも提供するつもりでこれを求めています-しかし、これはStackOverflowなので、誰かがきっとより有能に答えるか、答えを改善してください。

作業中のRailsアプリケーションのgemをアップグレードする必要がありました。これにより、2つの新しい依存関係が導入されました。そのうちの1つはですmime-types。ローカルで作業して、次の行を追加しましたconfig/environment.rb

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

サーバーにデプロイするには、すべてのgem依存関係をにインストールする必要があるため、次のコマンドを使用しvendor/gemsmime-typesgemを現在のrvmgemsetにインストールしました。

gem install mime-types --version 1.17

...そしてそのバージョンを次のように解凍しましvendor/gemsた:

rake gems:unpack
rake gems:unpack:dependencies

ただし、サーバーにデプロイした後、rake db:migrate実行すると次のエラーが表示され、mime-typesgemが見つからなかったことを示しています(スタックトレースが部分的に削除されています)。

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

2 に答える 2

4

同僚が私のためにこの問題を解決してくれました。Railsは、すべての宝石がvendor/gems特定のレイアウトを持っていることを期待しているようですが、これmime-typesは準拠していません。解決策は、オプションを追加するためenvironment.rbの依存関係を指定する行を変更することです。これにより、gemのソースに到達する方法を示す相対パスを指定する必要があります。mime-type:lib

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/

于 2012-06-28T16:53:23.867 に答える