Installing Ruby gems not working with Home Brew

后端 未结 7 526
盖世英雄少女心
盖世英雄少女心 2020-12-07 13:57

The gems I install via sudo gem install ... can\'t be executed (I get a command not found). They seem to install into /usr/local/Cellar/

相关标签:
7条回答
  • 2020-12-07 14:14

    brew unlink ruby; brew link ruby might add symlinks to /usr/local/bin/:

    $ which sass
    $ brew unlink ruby; brew link ruby
    Unlinking /usr/local/Cellar/ruby/2.0.0-p0... 20 links removed
    Linking /usr/local/Cellar/ruby/2.0.0-p0... 31 symlinks created
    $ which sass
    /usr/local/bin/sass
    

    brew --prefix ruby is still pretty slow, but you could also just add /usr/local/opt/ruby/bin to the path.

    $ time brew --prefix ruby
    /usr/local/opt/ruby
    0.216
    $ time brew --prefix ruby
    /usr/local/opt/ruby
    0.076
    $ stat -f%Y /usr/local/opt/ruby
    ../Cellar/ruby/2.0.0-p0
    
    0 讨论(0)
  • 2020-12-07 14:15

    I like home brew. There's probably a better way to do this, but if you run:

    gem environment
    

    That will print out a nice list of all the relevant paths. Look for the one labeled EXECUTABLE DIRECTORY. That's the one you want to add to your path. In my case that's /usr/local/Cellar/ruby/1.9.3-p362/bin/ruby but I would imagine it would change with newer version of Ruby.

    I'm using /bin/bash as my shell, but the process of adding it to your path should be pretty much the name.

    I use TextWrangler (via the command line tools) to edit my .profile file. To do that, it's just:

    edit ~/.profile
    

    When your done, either close your terminal and open a new one, or run:

    source ~/.profile
    
    0 讨论(0)
  • 2020-12-07 14:24

    Using the info in Timo's answer, I've got this:

    PATH=/usr/local/opt/ruby/bin:$PATH
    GEMSDIR=$(gem environment gemdir)/bin
    PATH=$GEMSDIR:$PATH
    export PATH
    

    Works for Homebrew, works for the separate gems directory, and doesn't hardcode a Ruby version.

    0 讨论(0)
  • 2020-12-07 14:25

    You can be fine with ruby installed by homebrew too.. You just lack the functionality of custom gemsets with homebrew.

    first do:

    sudo nano /etc/paths
    

    this will bring up nano editor,

    then add the following to the paths:

    /usr/local/Cellar/ruby/1.9.3-p194/bin
    

    your version of ruby will probably vary.

    Thats it. It should now detect your gems.

    Oh, btw, you need to Ctrl+X > y > ENTER to save a file in nano.

    0 讨论(0)
  • 2020-12-07 14:30

    Instead of using => $(cd $(which gem)/..; pwd)

    You could use this instead => $(brew --prefix ruby)/bin

    0 讨论(0)
  • 2020-12-07 14:37

    Homebrew is nice. However unlike brew and npm, gem doesn't make aliases in /usr/local/bin automatically.

    Solution

    I went for a very simple approach (as of March 2019):

    # Based on `brew --prefix ruby`
    export PATH=/usr/local/opt/ruby/bin:$PATH
    # Based on `gem environment gemdir`
    export PATH=/usr/local/lib/ruby/gems/2.7.0/bin:$PATH
    

    Add this to your .bashrc (or .bash_profile, .zshrc, etc.).

    That's it! Now all Ruby bins and installed gems will be available from your shell!

    In older versions of Homebrew (before 2017), there was a separate package for Ruby 2 called ruby20, for which you'd use the following snippet instead:

    export PATH=/usr/local/opt/ruby20/bin:$PATH
    

    This line was the only line needed at the time. But, in Ruby 2.1 the gems got moved to a separate directory. No longer under /usr/local/opt/ruby/bin, but instead at /usr/local/lib/ruby/gems/2.0.0/bin (where "2.0.0" is the last major Ruby version for Gem's purposes).

    How it works

    Homebrew keeps track of where it installed a package, and maintains a symbolic link for you that points there.

    $ brew --prefix ruby
    /usr/local/opt/ruby
    
    $ l /usr/local/opt/ruby
    /usr/local/opt/ruby@ -> ../Cellar/ruby/2.5.3_1
    

    Effectively, adding /usr/local/opt/ruby to PATH is the same as the following:

    export PATH=/usr/local/Cellar/ruby/2.5.3_1/bin:$PATH
    

    Except, this long version hardcodes the currently installed version of Ruby and would stop working next time you upgrade Ruby.

    As for Gem, the following command will tell you the exact directory Gem adds new packages to:

    $ gem environment gemdir
    /usr/local/lib/ruby/gems/2.7.0
    

    Tools

    These tools were meant to automatically bridge between Homebrew and Gem:

    • josh/brew-gem (no longer exists)
    • indirect/brewbygems (unmaintained)

    I haven't used these but they might work for you.

    0 讨论(0)
提交回复
热议问题