这似乎已经在How do I use gems with Ubuntu?以及其他答案中得到解决,但似乎没有一个解决方案适合我。
我正在使用Mac OSX 10.6
我已经使用bundler安装了heroku。下面显示了我的宝石环境和我的路径 - 我尝试将EXECUTABLE DIRECTORY和GEM PATHS中列出的文件夹添加到我的$ PATH,但是当我从我的rails项目中输入heroku时,我总是得到命令。
$ bundle show heroku
/Library/Ruby/Gems/1.8/gems/heroku-1.18.3
$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 1.6.1
- RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
- INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8
- RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- ruby
- universal-darwin-10
- GEM PATHS:
- /Library/Ruby/Gems/1.8
- /Users/iantinsley/.gem/ruby/1.8
- /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/iantinsley/bin:/usr/local/bin:/usr/bin
$ heroku
-bash: heroku: command not found
任何帮助非常感谢
答案 0 :(得分:3)
默认情况下,mac上的rubygems将可执行文件安装到/usr/bin
而不是/Library/Ruby/Gems
的gem目录下。但是,这些目录具有不同的权限:
~ $ ls -ld /usr/bin/ /Library/Ruby/Gems/
drwxrwxr-x 4 root admin 136 15 Nov 22:19 /Library/Ruby/Gems/
drwxr-xr-x 1085 root wheel 36890 11 Feb 22:57 /usr/bin/
所以尽管它们都归root
所有,但admin
组中的任何人都可以写入gems目录,而/usr/bin
则不会。
这里似乎发生的事情是,在安装gem时,bundler无法将heroku可执行文件安装到/usr/bin
,可能是因为此权限问题。 This blog post表明这是OSX上早期版本的bundler的一个问题。
rubygems安装的可执行文件不只是gem的bin目录中的heroku脚本的副本(即/Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin
)。相反,它是由rubygems生成的包装器脚本,它首先加载rubygems以使其能够在ruby加载路径上运行它,这样当脚本本身被调用时,任何require
语句都能够找到适当的库。
这意味着如果直接调用脚本,则不会加载rubygems,因此加载路径将无法正确设置,正如您所见,您将收到有关缺少依赖项的错误。要证明这一点,请尝试运行
$ ruby -rubygems /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin/heroku
运行脚本但首先加载rubygems。这应该(可能 - 我不确定)工作。
这也是bundle exec heroku
有效的原因。 Bundler根据需要设置加载路径。此外,这样做可确保将加载路径设置为与Gemfile.lock
文件匹配 - 实际上这是捆绑器的重点。
我不建议您向$PATH
添加任何内容。正如我们所看到它不起作用,但每次升级到较新版本的heroku gem时,您都需要更改它。
我还建议您不要在$RUBYLIB
变量中添加任何内容。这样做实际上可能会让heroku命令正常工作,但使用rubygems和bundler的重点是他们为你管理这样的东西。
我的第一个建议是使用rvm。这是一个非常有用的工具,我认为值得花一些时间研究它。
如果您不能或不愿意这样做,那么您可能需要重新安装heroku gem,并检查它是否正确安装。首先删除现有的gem:
$ sudo gem uninstall heroku
然后确保您拥有最新版本的bundler:
$ sudo gem update bundler
最后重新安装
$ bundle install
它应该要求您输入密码以将可执行文件安装到正确的位置。注意不在此处使用sudo
- 有关详细信息,请参阅上面的链接。
答案 1 :(得分:1)
尝试将此添加到PATH
:
/Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin
如果这不起作用,请让Spotlight查找名为“heroku”的文件,并将相应的目录添加到PATH
。如果你有一些时间并且觉得自己是一个老派的unix家伙:
$ cd /
$ ls -l $(find [A-Z]* -name heroku -not -type d -print)
您还可以使用Cinderella来设置Ruby / PostgreSQL / MySQL / MongoDB / ...环境。这将为您提供最新版本的一切,并明智地设置您的路径。我有一些问题让灰姑娘继续前进,但它是一个救星,它是如何把所有东西都放在~/Developer/
而不是把所有东西分散到各处的。
答案 2 :(得分:0)
答案 3 :(得分:0)
卸载,然后使用下面的sudo
中的命令重新安装。我正在使用macOS 10.14。
curl https://cli-assets.heroku.com/install.sh | sh
我最初是用自制软件安装的,但是总是出现命令notfund错误。原因可能是curl安装使得可以在官方文档中提到的两个目录中进行设置。
要快速设置到/ usr / local / lib / heroku和/ usr / local / bin / heroku,请运行此脚本(脚本需要sudo且与Windows不兼容)