2010-09-23 25 views
0

Je viens de créer une migration simple vers un projet existant. Ce projet utilise RMagick, et quand je l'appelle rake db: migrate la migration échoue ainsi:rake db: migrate échoue: à la recherche de RMagick - pourquoi?

Dans-iMac-335:myserver apple$ rake db:migrate 
(in /Users/apple/Documents/projects/electionjoy/glowing-mist-78) 
dlopen(/Users/apple/.gem/ruby/1.8/gems/rmagick-2.12.1/lib/RMagick2.bundle, 9): Library not loaded: /usr/local/libpng/lib/libpng12.0.dylib 
    Referenced from: /Users/apple/.gem/ruby/1.8/gems/rmagick-2.12.1/lib/RMagick2.bundle 
    Reason: image not found - /Users/apple/.gem/ruby/1.8/gems/rmagick-2.12.1/lib/RMagick2.bundle 
/Users/apple/.gem/ruby/1.8/gems/rmagick-2.12.1/lib/RMagick2.bundle 
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
/Users/apple/.gem/ruby/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require' 
/Users/apple/.gem/ruby/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:521:in `new_constants_in' 
/Users/apple/.gem/ruby/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require' 
/Users/apple/.gem/ruby/1.8/gems/rmagick-2.12.1/lib/RMagick.rb:11 

Il y a plus, mais c'est là où il cherche RMagick. Le bundle existe à cet endroit.

Pourquoi une migration de base de données nécessite-t-elle la présence de la gemme RMagick? Et quelle est la solution à ce problème? J'utilise Rails 2.2.2 sur Mac OS X 10.6, voici la liste des pierres précieuses locales:

* GEMS LOCAL *

actionmailer (2.3.8, 2.3.5, 2.2.2) 
actionpack (2.3.8, 2.3.5, 2.2.2) 
actionwebservice (1.2.3) 
activemerchant (1.5.1) 
activerecord (2.3.8, 2.3.5, 2.2.2) 
activerecord-tableless (0.1.0) 
activeresource (2.3.8, 2.3.5, 2.3.3, 2.2.2) 
activesupport (2.3.8, 2.3.5, 2.3.3, 2.2.2) 
authlogic (2.1.5) 
authlogic-oid (1.0.4) 
aws-s3 (0.6.2) 
builder (2.1.2) 
capistrano (2.5.9) 
cgi_multipart_eof_fix (2.5.0) 
chronic (0.2.3) 
configuration (1.1.0) 
daemons (1.0.10) 
facebooker (1.0.62) 
faker (0.3.1) 
fastthread (1.0.7) 
gem_plugin (0.2.3) 
google-geocode (1.2.1) 
heroku (1.8.5, 1.3.0, 1.0.1) 
highline (1.5.1) 
hoe (2.3.3) 
hpricot (0.8.1) 
json (1.1.9) 
json_pure (1.2.4, 1.1.9) 
launchy (0.3.3) 
less (1.2.20) 
libxml-ruby (1.1.3) 
mime-types (1.16) 
minitest (1.4.2) 
mongrel (1.1.5) 
mutter (0.5.3) 
mysql (2.8.1) 
net-scp (1.0.2) 
net-sftp (2.0.2) 
net-ssh (2.0.15) 
net-ssh-gateway (1.0.1) 
nokogiri (1.3.3) 
packet (0.1.15) 
paperclip (2.3.1.1) 
passenger (2.2.5) 
pg (0.9.0, 0.8.0) 
polyglot (0.3.1) 
postgres (0.7.9.2008.01.28) 
rack (1.1.0, 1.0.1, 1.0.0) 
radiant (0.8.1) 
rails (2.3.8, 2.3.5, 2.2.2) 
rake (0.8.7) 
rc-rest (3.0.0) 
RedCloth (4.2.3) 
rest-client (1.3.1, 1.0.3) 
rmagick (2.13.1, 2.12.1) 
ruby-openid (2.1.7) 
rubyforge (2.0.4, 2.0.2) 
rubygems-update (1.3.7, 1.3.5) 
searchlogic (2.3.5) 
sequel (3.0.0) 
sinatra (0.9.2) 
spree (0.10.2) 
sqlite3-ruby (1.2.5, 1.0.1) 
state_machine (0.8.0) 
stringex (1.0.3) 
taps (0.2.26, 0.2.19) 
thor (0.9.9) 
treetop (1.4.8) 
whenever (0.3.7) 
will_paginate (2.3.11) 
xml-simple (1.0.12) 

Répondre

-1

L'environnement Rails entier est chargé lors de l'exécution d'une tâche Rake, telle que l'exécution d'une migration de base de données et qui inclut des dépendances gem. J'ai été mordu par la même chose récemment lors de la résurrection d'un ancien projet et je ne pouvais pas migrer la base de données avant d'avoir installé certains gemmes sans rapport. En examinant les informations contenues dans la trace de la pile (Library not loaded: /usr/local/libpng/lib/libpng12.0.dylib), je suppose que ImageMagick n'est pas installé correctement sur votre machine. Vous pouvez essayer this script.

+0

L'environnement Rails entier n'est-il pas chargé lorsque l'application s'exécute également? Il fonctionne sans problèmes, mais il meurt sur rake db: migrate. Solution: désactivez les références à rmagick dans environment.rb lors de la migration ... –

+0

Le lien vers le script est rompu. –

0

Je ne sais pas pourquoi votre machine ne trouve pas, mais Rake Tâches dans les rails nécessitent toute gemme que votre application est configurée pour utiliser, même si le code n'est pas appelé. Si ce n'est pas le cas, un autre appel (qui est remplacé par un gem manquant) peut se produire et entraîner un comportement inattendu.