Cannot resolve "rbenv init" instruction for zsh and oh-my-zsh on Mac - ruby

I'm a Ruby developer setting up my local development environment on a new iMac running macOS High Sierra with iTerm2, Homebrew, rbenv, zsh and oh-my-zsh.
I used RVM before on my Linux machine, but want to switch to rbenv with this iMac because I've heard it's better in some ways, so I'm trying to make sure all is as it should be with my rbenv setup before I start downloading/installing Rails and other gems.
I'm running rbenv init, which, as I understand it, will tell me what I need to do next to get rbenv working. It displays this message:
# Load rbenv automatically by appending
# the following to ~/.zshrc:
eval "$(rbenv init -)"
So I went into my .zshrc file and added that line. My .zshrc file currently looks exactly like this (comments omitted):
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export ZSH="/Users/christian/.oh-my-zsh"
plugins=(git)
source $ZSH/oh-my-zsh.sh
No matter how many times I restart my iTerm terminal and run rbenv init, it always gives me that same instruction, and nothing else.
The first line in the file used to be: export PATH=$HOME/bin:/usr/local/bin:$PATH but I changed it to the current line because another StackOverflow page suggested this to someone having a very similar problem, but it didn't help.
I don't understand why it keeps telling me to add something that's already in the .zshrc file, and I don't know whether I've successfully setup rbenv with everything and am ready to start developing in Ruby on Rails.
I've looked at lots of stuff about this on here and other sites, but I can't seem to find the answer. I would be very grateful if someone could tell me why it keeps giving me that same message? how I make it proceed with the instructions and tell me the next thing to do? and how I'll be able to tell for sure when my rbenv is properly setup for development?

I eventually ran curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash and it showed green for everything. It seems I had everything already setup correctly; the rbenv init interface was just confusingly telling me to do something I'd already done. I confirmed it was all working by downloading different versions of Ruby with rbenv install, switching between them with rbenv local and rbenv global, and making sure ruby -v always displayed whatever version I had selected.

Related

PIP is linked only to system environment

I'm using pyenv-virtualenv on Ubuntu 16.04 LTS.
While I was installing imblearn package for my virtualenv using Python 3.5, I realized it was being installed on system environment which uses Python 2.7. I checked with pyenv version but it clearly returned that I was on my virtualenv.
I opened a Python shell and tried to import imblearn and got ImportError: No module named 'imblearn'.
When I checked with pip list, it clearly stated that imblearn was installed. But every other packages that have been installed were missing, hence telling that the list was of system environment.
I've tried making a new environment and checked but the list is still of system and installation goes to system as well.
My pip is stuck with system.
I have never experienced this before and have no idea how to fix this.
Below is my .bashrc setting:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Just the way it tells me to set.
I've been using it fine until yesterday which I found out this was happening.
I suspect it has something to do with pyenv global command which I used while I was telling my partner how to use pyenv-virtualenv yesterday.
Still, I have never had a problem with that command before.
Please help.
Update
For some reason, source ~/.bashrc put everything back to normal. (I don't know why I typed this command. I just did it.)
But I'd still like to know how this happened and why it is fixed when I changed nothing in my .bashrc file and when even re-opening terminal or rebooting didn't fix things.
I still don't know how this was solved, and assume that this won't happen in later version pyenv-virtualenv.
It's a year old post, but I guess I could post what helped me back then so that others won't try to solve my long ago problem for me.
Thanks for letting me know.
source ~/.bashrc

eval "$(rbenv init -)" does not work when referenced from ~/.zshrc (OS X)

This is one those strange things, although I'm sure the most recent installation of Sierra has something to do with this.
In fact, yesterday night I had to completely (manually remove) the whole rbenv folder to make it working again.
In a nutshell, the following eval "$(rbenv init -)" has been added immediately after the PATH declaration in the ~/.zshrc file.
However, when launching the iTerm console, that line pass ignored and in fact all the gems under the shims are ignored. This should also result in the default ruby version to be loaded, which is not the case as a ruby -v returns my global 2.3.1 recently installed.
The funny thing is that a eval "$(rbenv init -)" at a command line properly resolve and all works fine after that.
I have another Mac, where I can't install Sierra and the same settings, same ZSH version etc. works just fine.
Does anybody experience the same?
Thanks
Andrea
Ok, I've raked the net for 30 minutes without results, so I did a simple test.
Instead of copy and pasting the results proposed by the rbenv init, I typed what is proposed into the ~/.zshrc file to get it working like a charm.
I can only assume that some characters shown on screen are encoded in some different way, hence they generate the problem.

RVM + Zsh "RVM is not a function, selecting rubies with 'rvm use ...' will not work"

I'll start by saying I'm not an expert at command-line, so I really only barely know what I'm doing.
I cannot get RVM and oh-my-zsh to play nice together. I've tried several different solutions posted around, some on SO, but nothing I have found seems to fix the issue.
Initially, someone else setup RVM on my machine. I later setup oh-my-zsh myself, and remember having a lot of trouble doing so.
My .zhsrc file is completely default except for these 2 lines
export PATH=$HOME/bin:/usr/local/bin:/usr/local/rvm/bin:$PATH
#pretty sure this line does nothing, although I've seen this fix around
# several places. I noticed that I don't seem to have an .rvm file in my
# home directory which would be an issue, but I have no idea how to
# go about correcting this.
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
I added the /usr/local/rvm to the Path directive as zsh returns zsh: rvm command not found without it there. Otherwise most rvm command work, with the exception of rvm use which throws the following error:
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.
I have ensured the profile preferences on my profile in iTerm2 are set to "Login Shell" as recommended by RVM
I have tried changing these preferences to the "Command" option and using the recommended /bin/bash/ --login as the command, however zsh no longer appears to work when this happens. Changing the command to /bin/zsh/ --login allows zsh to work again but does not solve the problem as I still get the "RVM is not a function" error when trying to run rvm use
The default ruby in RVM is set to 2.0.0. I can run ruby -v in my home folder and get the ruby version output which shows the default version.
Working on rails projects, I can run all rails commands IF the Gemfile specifies ruby 2.0.0, the default. However on a project that uses a different version, I get the following error:
Your Ruby version is 2.0.0, but your Gemfile specified 1.9.3
Then I cannot run rvm use 1.9.3 as it returns the above mentioned error.
How can I make zsh play nice with RVM?
Some info about my setup:
Mac OSX 10.9.1 (Mavericks)
iTerm2
Zsh 5.0.2 with oh-my-zsh
RVM 1.5.1
For me, I just had to add
source $HOME/.rvm/scripts/rvm
to my ~/.zshrc and it started working, after having the same error message as in this SO question.
Turns out that RVM was installed in the wrong place. When I had initially installed RVM I believe I did so with the sudo command, which ran the multi-user install (installed to /usr/local/rvm), and not the single user (should be in ~/.rvm/scrips/rvm), which is why all the posted solutions were not working for me.
I had to uninstall RVM with rvm implode. There were some permissions issues, so I had to manually go in and delete the files that could not be deleted. Ran the curl command to re-install RVM and now it's installed in the correct place.
Sourcing RVM in my .zshrc with [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" now works properly and I can switch between rubies.
#trustkr's answer worked for me, but would like to add...
I ran into this issue immediately after install of rvm. In order for the
source
to work in in the ~/.zshrc file to work, you will need either start a new terminal session and work there OR you can run
source ~/.rvm/scripts/rvm
in the same terminal session in which you installed.
[Mac OS 10.10.5 - iTerm - zsh]
I had the same issue added this one line at end of .zshrc file
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
and works now everything works fine on my ubuntu 16.04 operating system :)
You need to run the following:
$ source ~/.rvm/scripts/rvm
then run this
$ type rvm | head -n 1
and the result will be like
rvm is a shell function from /home/sun/.rvm/scripts/cli
Hope that helps!
Another solution :
1) In the terminal run :
which rvm
The output in my case is ---> /usr/share/rvm
2) Open .zshrc file
nano ~/.zshrc
add "source + the_path_to_your_rvm + /scripts/rvm", in my case it's :
source /usr/share/rvm/scripts/rvm
3) save the file (.zshrc)
4) close the terminal and open it again

RBENV resolve duplicate directories for ruby-build

I recently updated my ruby version for the first time since installing rbenv. On my development machine I discovered that I needed to reinstall bundler and all my gems again for each application using bundle install.
Now, when I login to my production server I notice that I have a ruby-build directory in my home folder at ~/ruby-build and in .rbenv/plugins. How can I find out which one my server is using and so which one to run git pull and install the new version of ruby? Can I just delete the directory at ~/ruby-build and deal with the other? Doing some exploring I find I also have a ruby-build in usr/local/bin on my server but this is not a directory.
I am completely confused by all of this. Rbenv lives in my home directory, rather than in any system directory on the server. Does this matter? How does it still work on a server even if I am not logged in?
Running rbenv versions from my home directory on the server reports "The program 'rbenv' is currently not installed" but lists the versions installed on my development laptop.
My .bashrc on the sever contains this entry at the top
if [ -d "${RBENV_ROOT}" ]; then
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
fi
My .bashrc on my development laptop contains this entry at the bottom.
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
Since you include that in your .bashrc, I imagine that if you were to echo $RBENV_ROOT in the terminal you'll find out which rbenv directory is the one being used.
Although, you say that the rbenv command doesn't work so perhaps $RBENV_ROOT is not defined. In that case, you can simply do something like RBENV_ROOT=$HOME/.rbenv/ before that conditional -- or whatever you like -- to set the rbenv directory it should use.
When you do that, to define $RBENV_ROOT, re-login to make the changes take effect, or re-source the .bashrc file with source ~/.bashrc.

I'm getting "RVM is not a function" error on Mac OS X, and no posted solutions work

I'm on Mac OS x 10.8.2 ("Mountain Lion"), and I successfully installed RVM 1.17.8 and its dependencies. I'm able to use it to install Ruby versions using rvm install 1.9.2, but I can't execute rvm use <version> without getting this error:
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.
I have the following in ~/.bash_profile, which I have set to run, using source ~/.bash_profile, whenever a terminal window is launched:
export SVN_EDITOR=vim
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
[ -r ~/.bashrc ] && source ~/.bashrc
I've tried running source ~/.rvm/scripts/rvm, which runs without returning an error, but I still get the "RVM is not a function" error when I try to use RVM to set the Ruby version within the terminal session.
I also tried uninstalling and reinstalling RVM using rvm implode. I've run out of ideas and I can't seem to find any more solutions online. Help?
Make sure your shell initialization files are set up properly:
rvm get head --auto-dotfiles
Then go to your terminal emulator preferences and enable login shell, sometimes it it required to use /bin/bash --login.
Also make sure to fully close terminal and open it fresh after changing the setting.
The solution ended up being on the RVM Help & Support page, in the ".bash_profile not being loaded on OSX" section. It seems that the issue was that I had my terminal set to open with the "default login shell" and when I changed it to instead open with the command "/usr/bash" in Preferences/Setup, "source ~/.rvm/scripts/rvm" started working, and rvm is now being recognized as a function.
look for .profile, if exists, remove it! loof for .zshrc, if exists, remove it! Now, use vi to edit your .bash_profile, add this line
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Now, close all console services and open again, make a test using
$ rvm gemset use global
Work fine for me!

Resources