【问题标题】:bundler update fails with mysterious permission denied捆绑器更新失败,神秘的权限被拒绝
【发布时间】:2011-07-22 04:53:31
【问题描述】:

我不知道为什么 bundler 正在寻找 actionpack-1.4.0.gem,但它导致我的 bundle update 命令失效。

这里是所有相关的成绩单(据我所知......)

$ 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 gem 了解多少?

/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)> 

【问题讨论】:

    标签: ruby-on-rails rubygems bundler


    【解决方案1】:

    您最初是否使用sudo gem install ... 安装rails?当 bundle 在没有 sudo 权限的情况下运行时,它将无法更新这些。删除最初安装的 gem 并重新运行 bundler。

    【讨论】:

    • 是的,我最初确实使用过 sudo gem install。我会试试你说的,这似乎是一个安全的做法。
    • 我尝试卸载 rails:"$ sudo gem uninstall rails",但我仍然得到同样的错误:"$ bundle update" 给我 "/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) "
    • 你也必须卸载 actionpack,可能还有其他依赖项。
    【解决方案2】:

    ActionPack 是 rails 的依赖项。当您运行bundle install 时会发生什么?那应该安装相关的actionpack 版本。

    不过,它似乎在寻找旧版本的 actionpack

    在您的Gemfile.lock 中搜索actionpack。这会告诉你它是什么的依赖项。

    此外,如果 bundler 尝试安装到系统 gem,您可能需要 sudo bundle install 尽管您最好给它一个安装路径:

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

    【讨论】:

    • 在尝试此操作之前,我删除了我的 Gemfile.lock...bundle 的说明强烈警告不要使用 sudo ...
    • 捆绑包的说明强烈警告不要使用 sudo,所以我不确定。问题是,为什么捆绑器要寻找 actionpack-1.x。我没有看到任何引用它。
    • 这就是为什么如果您遇到权限问题,我建议提供一个特定的捆绑器路径。你有./bundle/config 文件吗?它的内容是什么?你也试过bundle install而不是bundle update
    • 我试过捆绑安装和更新;我没有 ./bundle/config 也没有 ~/.bundle/config 文件。
    • 我怀疑我的问题与我使用 macports 的事实有关,它将 gem 存储在 /opt/local/bin/gem 下 - 但我的 Mac OS X 带有一个基本 gem 可执行文件在 /usr/bin/gem 下。不知何故,捆绑器正在混淆,但我不知道如何。 ....而且,我完全卸载了macports的gem版本,并完全重新安装了它,但仍然没有解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2015-03-25
    • 2014-11-04
    相关资源
    最近更新 更多