обновление упаковщика завершается неудачно с отказом в таинственном разрешении

Я не могу сказать, почему упаковщик ищет actionpack-1.4.0.gem, но это приводит к тому, что моя команда обновления пакета умирает.

Вот все соответствующие стенограммы (насколько мне известно...)

$ bundle update
Fetching source index for http://rubygems.org/
Using rake (0.8.7) 
Using Ascii85 (1.0.0) 
/opt/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:145:in `initialize': Permission denied - /opt/local/lib/ruby/gems/1.8/cache/actionpack-1.4.0.gem (Errno::EACCES)
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:145:in `open'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:145:in `download'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/source.rb:255:in `download_gem_from_uri'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/source.rb:72:in `fetch'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/installer.rb:45:in `run'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/spec_set.rb:12:in `each'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/spec_set.rb:12:in `each'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/installer.rb:44:in `run'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/installer.rb:8:in `install'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/cli.rb:275:in `update'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/vendor/thor/task.rb:22:in `send'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/vendor/thor/task.rb:22:in `run'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/vendor/thor.rb:246:in `dispatch'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/lib/bundler/vendor/thor/base.rb:389:in `start'
from /opt/local/lib/ruby/gems/1.8/gems/bundler-1.0.10/bin/bundle:13
from /opt/local/bin/bundle:19:in `load'
from /opt/local/bin/bundle:19

ОК, поэтому он не работает из-за отказа в разрешении на этом пути, но там нет файла:

/mydev/ElectionManager(export-work)> ls /opt/local/lib/ruby/gems/1.8/cache/actionpack-1.4.0.gem
ls: /opt/local/lib/ruby/gems/1.8/cache/actionpack-1.4.0.gem: No such file or directory

Хорошо, давайте посмотрим на окружающую среду. Там что-то рыбное?

/mydev/ElectionManager(export-work)> env
TERM_PROGRAM=Apple_Terminal
GEM_HOME=/opt/local/lib/ruby/gems/1.8
TERM=xterm-color
SHELL=/bin/bash
TMPDIR=/var/folders/BF/BFIqAzICGVuMEvQQwzRkvE+++TI/-Tmp-/
Apple_PubSub_Socket_Render=/tmp/launch-9H2vLV/Render
TERM_PROGRAM_VERSION=273.1
USER=pitosalas
COMMAND_MODE=unix2003
SSH_AUTH_SOCK=/tmp/launch-4WmMHp/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:0
 PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/mysql/bin/
PWD=/mydev/ElectionManager
EDITOR=mate -w
LANG=en_US.UTF-8
PS1=\w$(__git_ps1 "(%s)")> 
SHLVL=1
HOME=/Users/pitosalas
LOGNAME=pitosalas
DISPLAY=/tmp/launch-p24Csr/org.x:0
OLDPWD=/Users/pitosalas
_=/usr/bin/env

Ничего подозрительного. Давайте просмотрим весь код, чтобы увидеть, упоминается ли вообще actionpack-1:

/mydev/ElectionManager(export-work)> grep  -r -i "actionpack-1" .
/mydev/ElectionManager(export-work)> 

Нет, не упоминается. А что есть в Gemfile?

$ cat Gemfile 


source :gemcutter

#gem 'rails', "2.3.8"
gem 'rails'
gem "sqlite3-ruby", "1.2.5", :require => "sqlite3"

gem "authlogic"
gem "prawn", '>= 0.7.2'
gem 'will_paginate', '~> 2.3.11'
gem 'tpitale-constant_cache', '>= 0.1.2', :require => 'constant_cache'
 gem 'rubyzip', '>= 0.9.4', :require => 'zip/zip'
 gem 'redgreen', '>=1.2.2'
 gem 'searchlogic', '>=2.4.14'
 gem 'cancan'
 gem 'fastercsv'

 group :development do
 end

 group :test do
   gem 'thoughtbot-shoulda', '>=2.10.2',  :require => 'shoulda'
   gem 'machinist'
   gem 'faker'
   gem 'mocha'
   gem 'pdf-reader'
   gem 'awesome_print'
   gem 'turn'
   gem 'rspec'
 end

 group 'cucumber' do
   gem 'machinist'
   gem 'faker'
   gem 'cucumber-rails',  '>=0.3.0',  :require => false
   gem 'database_cleaner',  '>=0.5.0', :require => false
 gem 'webrat',  '>=0.7.0', :require => false
 gem 'pickle', :require => false
end

group :production do

end

Хорошо, это выглядит довольно хорошо. Что gem думает, что знает о драгоценных камнях rails?

/mydev/ElectionManager(export-work)> gem list rails

* МЕСТНЫЕ ЖЕМЧУЖИНЫ *

rails (3.0.4, 2.3.8, 2.3.5, 2.3.4, 2.2.2)
rails_best_practices (0.6.4, 0.3.26, 0.3.19, 0.3.16)
/mydev/ElectionManager(export-work)> 

person pitosalas    schedule 24.03.2011    source источник


Ответы (2)


ActionPack — это зависимость от rails. Что происходит, когда вы запускаете bundle install? Это должно установить соответствующую версию actionpack.

Однако похоже, что он ищет старую версию actionpack.

Найдите actionpack в своем Gemfile.lock. Это скажет вам, от чего это зависит.

Кроме того, если пакетник пытается установить системные гемы, вам может потребоваться sudo bundle install, хотя вам лучше указать путь для установки:

bundle install --path=/something/specific/to/this/project

person lebreeze    schedule 24.03.2011
comment
Я удалил свой Gemfile.lock перед тем, как попробовать это ... Инструкции для пакета настоятельно предостерегают от sudoing ... - person pitosalas; 24.03.2011
comment
Инструкции для пакета строго предостерегают от sudoing, поэтому я не уверен в этом. Вопрос в том, почему упаковщик ищет actionpack-1.x. Я не вижу ничего, что бы ссылалось на это. - person pitosalas; 24.03.2011
comment
Вот почему я предложил указать конкретный путь к упаковщику, если у вас возникли проблемы с разрешениями. У вас есть файл ./bundle/config? Каково его содержание? Также вы пробовали bundle install вместо bundle update - person lebreeze; 24.03.2011
comment
Я пробовал пакетную установку, а также обновление; У меня нет ни файла ./bundle/config, ни файла ~/.bundle/config. - person pitosalas; 25.03.2011
comment
Я подозреваю, что моя проблема связана с тем, что я использую macports, который хранит гем в /opt/local/bin/gem, но моя Mac OS X поставляется с базовым исполняемым гемом в /usr/bin/gem. Каким-то образом упаковщик путается, но я не могу сказать, как. .... Более того, я полностью удалил версию gem для macports и полностью переустановил ее, и это все еще не решило проблему. - person pitosalas; 25.03.2011
comment
Вы пытались указать путь для комплекта? bundle install --path=/wherever Мы часто используем --path=./gem, поэтому драгоценные камни остаются в проекте. Бандлер не должен искать драгоценные камни где-либо еще. - person lebreeze; 25.03.2011

Вы изначально устанавливали рельсы с помощью sudo gem install ...? Когда пакет запускается без привилегий sudo, он не сможет их обновить. Удалите изначально установленный гем и повторно запустите упаковщик.

person harald    schedule 24.03.2011
comment
Да, изначально я использовал sudo gem install. Я попробую то, что вы говорите, это кажется безопасным. - person pitosalas; 24.03.2011
comment
Я попытался удалить rails: $ sudo gem uninstall rails, но все равно получаю ту же ошибку: обновление пакета $ дает мне /opt/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:145:in `initialize': Отказано в доступе - /opt/local/lib/ruby/gems/1.8/cache/actionpack-1.4.0.gem (Errno::EACCES) - person pitosalas; 24.03.2011
comment
Вам также придется удалить пакет действий и, возможно, другие зависимости. - person harald; 24.03.2011