如何确保ruby gem安装在正确的位置以便由bundler执行?
我似乎经常遇到将gem放在正确位置的问题(安装时不需要使用sudo
。)
为了解决sudo
问题,我安装了rbenv
,然后用它来安装ruby 2.1.0,这样我就可以从Mac OSX系统中单独安装了一个。
然后我安装了bundler。 但是当我使用Bundler从Gemfile安装gem时,我找不到它们。
在我所采取的所有步骤之间,例如向.bash_profile添加行等等,我有以下内容,但实际上只是想要一种清晰,直接的方式来管理gem及其本地执行:
gem env
:
编辑:我删除了所有内容并重置了PATH – 仍然没有修复任何东西,但你可以看到gems安装在一个目录中但是当我调用可执行文件时,找不到命令:
RubyGems Environment: - RUBYGEMS VERSION: 2.0.14 - RUBY VERSION: 2.0.0 (2014-02-24 patchlevel 451) [universal.x86_64-darwin13] - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0 - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby - EXECUTABLE DIRECTORY: /usr/bin - RUBYGEMS PLATFORMS: - ruby - universal-darwin-13 - GEM PATHS: - /Library/Ruby/Gems/2.0.0 - /Users/fongster/.gem/ruby/2.0.0 - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0
以下是当我想要跑步时会发生什么,比如shotgun
:
bash-3.2$ shotgun /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in
to_specs’:找不到’shotgun’(> 12个总gem中的= 0)(Gem :: LoadError)
有人能指出我在OSX上进行ruby gem管理的简单,直接的指导,以便:
- 我不需要使用
sudo
来安装gem - 我可以使用bundler从Gemfile安装给定项目
- 那些gem及其可执行文件(霰弹枪,restclient,sass)可以被执行
- 基于这个设置的本地环境在heroku中“正常工作”?
- 当我需要做东西时,我不需要输入
bundle exec
还有一些清晰度,我是否需要总是去一个bash shell(目前,我一直在使用exec bash
来让我的shell工作)。
编辑:按照以下步骤,并在捆绑时得到此响应:
Errno::EEXIST: File exists @ dir_s_mkdir - /Users/fongster/.rbenv/shims/gem An error occurred while installing backports (3.6.3), and Bundler cannot continue. Make sure that `gem install backports -v '3.6.3'` succeeds before bundling.
从一个干净的开始
除了Bundler主页上所述的简单步骤之外,您无需执行任何操作:
- 不要使用
sudo bundle ...
- 不要改变你的PATH
-
不要触摸任何
~/.file
-
复制
require 'bundler/setup'
在第一个应用程序文件顶部的require 'bundler/setup'
- 请在所有Bundler管理的“二进制文件”前面使用bundle exec
一切都可以使用开发人员工作站的漂亮默认值。 如果你想进一步运行多次Rubies并排或部署到prod或厌倦了输入bundle exec
(你应该使用alias bex='bundle exec'
替换为bex
),那么你可以阅读完整手册 ,输入bundle install --binstubs
并安装一个Rubymongers(RBEnv,RVM)。
在您的具体情况
我会从头重新开始:
- 卸载RBEnv(
rm -rf ~/.rbenv
并在grep rbenv ~/.bashrc ~/.bash_profile ~/.zshrc /etc/profile /etc/profile.d/*
删除rbenv提及grep rbenv ~/.bashrc ~/.bash_profile ~/.zshrc /etc/profile /etc/profile.d/*
) - 卸载Bundler
使用rbenv-gemset 。 它工作得很好,满足您的所有要求。 我已经使用它2年了,没有任何问题。 Heroku没有问题。
这是我设置新Ruby项目的过程:
1. Create directory (or Rails app in new directory) 2. cd directory 3. Set ruby version: Use 2.1.0 or another version rbenv local 2.1.0 4. Set gemset: replace app-name with the name of the app echo app-name > .rbenv-gemsets 5. Check gemset. Should be app-name global: rbenv gemset active 6. rbenv rehash 7. Create Gemfile 8. gem install bundler 9. bundle
如果它不能按预期工作,请执行rbenv rehash
。
您永远不需要使用sudo
安装gem。
关于你的shell,这可能会导致问题。 如果常规终端不起作用,则可能存在另一个问题。
由于问题似乎与你的shell和PATH有关,这里是我的.bash_profile
export PATH="$HOME/.rbenv/bin:$PATH" export PATH=/usr/local/bin:$PATH eval "$(rbenv init -)"
您可能希望尝试使用上述替换.bash_profile,或者创建新用户并查看问题是否消失。