How do I set 'global' as default gemset? - ruby-on-rails

In RVM every time I restart it says gems aren't found, because all of them are installed in my 'global' gemset.
How can I just set this to be the default so I don't need to switch to that gemset everytime?

I actually looked through documentation for some time and didn't see anything, but I found this from stack overflow by searching a bunch of different things.
First run rvm list to see your rubies
Then run rvm gemset list to see your gemsets
Finally, run rvm use <desired-ruby-version>#<gemset> --default
For example:
rvm use ruby-1.9.3-head#global --default

Related

RVM's current and default version isn't actually being used

I am running my rails app from a virtualbox build by vagrant using puppet scripts. Every time I login to the box, I have the following problem:
When I run rvm list one of the things it lists is the following:
=* ruby-2.1.1
But when I try to run rails console, it tells me I need to install missing gems. When I run rvm use default, and then run rails console, it works. Why is the default and current setting in rvm not working--why do I have to go to the extra step of also telling rvm which ruby version to use?
Note: I do have a .ruby-version file with 2.1.1 in it. I'm using rvm version 1.25.25
Because you have to tell rvm which version to use.
In earlier version of rvm we have to define .rvmrc file which mention which ruby and gemset to use.
In recent version of rvm we have to define .ruby-version file with ruby version in it and .ruby-gemset file with the name of gemset.
If you just want a quick solution then in your rails directory make a .ruby-version file with content 2.1.1
correct syntax is:
rvm --default use ruby-2.1.1#global
This command sets ruby to selected default permanently. All new terminals will use your default Ruby. Also you don't mention anything about gemset, so I presume global would exist if you didn't mess up your setup.
This solved it:
I added rvm use --default to the machine's ~/.bashrc file.

RVM can not change gemset

Before I installed MySQL and restart my computer, my RVM works well.
If I type
rvm gemset use rails
It will show:
Using ruby-1.9.3-p194 with gemset rails
and then I type:
rvm gemset name
It shows:
rails
which is correct.
However, after I restart my computer, something strange happens.
Firstly, the system cannot find the command 'rvm', so I modified by ~/.bash_profile:
export PATH=/usr/local/mysql/bin:/Users/hanxu/.rvm/bin/:$PATH
Above is the content of my .bash_profile
Then rvm works.
Then I type:
rvm gemset use rails
It seems running well and shows:
Using ruby-1.9.3-p194 with gemset rails
However, when I examine it by asking rvm gemset name, it turns to be:
/Users/hanxu/.rvm/gems/ruby-1.9.3-p194
which is my default gemset, rather than "rails".
No matter how I set gemset, it always change to the default setting.
Can anyone tell me what's the problam?
Are you using an .rvmrc file?
https://rvm.io/workflow/rvmrc/
Your RVM installation is most likely incomplete. Look for this string in your .profile / .bashrc / .zshrc or whatever else you might be using
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
This command checks for existence of $HOME/.rvm/scripts/rvm and, if found, loads it into the shell. This effectively loads the RVM. So, if you don't find this command, add it and open a new terminal window, RVM should be there.
rvm has a command to fix sourcing:
rvm get stable --auto
the auto switch will update your *rc files, then it should be enough to open new terminal and it should be all fine.
Use this command to switch gemset.
rvm use <ruby version>#<gemset name> --create
This command will switch rvm to given gemset and create it, if it does not exist.
In my case, I needed to add the user to the rvm group before I could use rvm.

How to tell rvm where to install gem packages

Normally, when I try to create a gemset using rvm,
it places any gems in $HOME/.rvm
However, on one machine when I run:
rvm use 1.8.7-p358#chris_gems --create
The command tries to write to the directory /usr/local/rvm/gems/ruby-1.8.7-p358
and as a result I get permission errors.
I tried search the web for command line arguments to "rvm" related to the install path
but didn't find anything after a 10 minute search (perhaps I'm sucking at Googling).
Also I tried setting GEM_HOME, GEM_PATH to my home directory.
But that didn't make a difference.
Any suggestions on how I can get rvm to install stuff in $HOME/.rvm
Thanks.
There are two ways to make it working:
add your user to rvm group - this will allow your user to write gemsets in system
run rvm user gemsets - this will make all new gemsets to be created in $HOME/.rvm

Why do I need to use "rvm use default" after opening new terminal window?

On opening a new terminal window (Mac OSX 10.7.2) and entering rails, I get the always fun 'rails is not currently installed..." message. But I enter rvm use default 1.9.2 and all is good with the world.
Where did I go wrong?
Zabba is right in the comments when he says the correct command to use is rvm use 1.9.2 --default.
RVM considers default to be a Ruby, equivalent to the Ruby set to the default. If I type rvm use default into my terminal, I get this output:
$ rvm use default
Using /Users/tom/.rvm/gems/ruby-1.9.3-p0
However, there is the ability to list multiple Rubies in your call to rvm use, e.g:
$ rvm use 1.9.3 system
Now using system ruby.
$ rvm use system 1.9.3
Using /Users/tom/.rvm/gems/ruby-1.9.3-p0
Although I am not entirely sure whether this is a feature (or the particular use case for passing multiple Rubies since RVM doesn't appear to fall back on the other listed Ruby if the last one isn't installed), it means that when you type rvm use default 1.9.2, rather than setting the default to 1.9.2, you are telling RVM to use 1.9.2, since it is the last Ruby listed in the command.
If you run the command rvm use 1.9.2 --default once, you will then be using 1.9.2 in every terminal you open.
NB on the multiple-arguments-to-rvm-use-feature: I know that you can pass multiple Rubies to the RVM command to run a script with multiple versions of Ruby but I can't see RVM setting two versions of Ruby to run at once.

Questions regarding RVM

I am exploring the world of Ruby and RVM. I am going through a lot of documentation and trying out RVM, but I am a bit confused about the entire work flow. I am writing down the workflow as I understand it. Can someone please take a look and see if this understanding is correct?
I am using a Mac.
RVM is essentially a script that allows us to manage Ruby environments for development purposes.
RVM allows switching between different versions of Ruby with rvm use 1.9.2.
To use a particular gemset with the current Ruby version, we need to create a gemset using
rvm --create gemset rails235
Install the gem using gem install rails -v=2.3.5
Q: What happens if I did gem install rails -v=2.3.5 prior to creating a gemset? Will there be two copies of the same Rails installed under RVM's Ruby 1.9.2?
Q: What happens if I install 2.3.5 and 3.1.0 prior to creating gemsets and then create a gemset for each version?
Q: where does rvmrc come into picture in the whole story?
Any other information that helps me get this straight is extremely helpful.
#Kiran, this is in reference to your comment above. When you install a different version of ruby with rvm, it'll add to this list:
$ rvm list
rvm rubies
=> ruby-1.9.2-p290 [ i386 ]
On my system, I've only got one version running (for now). This helps too
$ rvm gemset list
gemsets for ruby-1.9.2-p290 (found in /Users/mike/.rvm/gems/ruby-1.9.2-p290)
global
=> mg_diaspora
rails3
railscasts
ruby
sorcery
The practice is to install common gems into your global gemset and create/use sets for everything else. I tend to keep pry and others in the global gemset. As Mike K. said, you'd never do #2; if you did do such a thing, I would imagine global having priority.
#3 .rvmrc
You can do things like this in the file:
rvm use 1.9.2#rails3 --create
This will ensure whenever you 'cd' into the directory, it'll switch to 1.9.2 and it's 'rails3' gemset; the following attribute ensures the gemset will be created if it doesn't already exist.
Update
Ex: if I say rvm use 1.9.2#rails3 --create how does this pick the version of rails3.1.0 gem
Because by the time this rails3 gemset is created I already have 2 versions of rails gems?
That's easy - when you run bundle install it creates a Gemfile.lock; this essentially 'locks' the gems that your application is set to use. You've never require two different versions of rails in a single Gemfile anyways - that's just ridiculous =)
1) Rvm automatically creates an #global gemset per interpeter so if you did what you state in the first question you'd have a 2.3.5 in the global gemset.
2) I'm not sure why you would do this.
3) rvmrc is just where you can specify environment info like bashrc, i use it to specify my default architecture for instance. It gets read when rvm gets sourced in your profile.
Basically global is a mix-in for all other gemsets under a specific interpreter. So, if you put rake and say bundler into the global gemset, and then create and enable your own gemset under that specific ruby, it will have both the gems you install in that gemset AND global.
You will see it as a single gemset though. Also, if you attempt to delete a gem that is in global while still in, say, mygemset you will not be able to delete it. This is to protect other gemsets from having gems mixed in from global that they rely on from being removed. You would have to either explicitly change to global or execute something like
rvm 1.9.2-p290#global exec gem uninstall rake -v='0.9.2'
Also, bear in mind that there is a significant difference between 'default' and 'global'. The 'default' gemset is not really a gemset perse. This is selected when you do something like
rvm use 1.9.2
Notice you did not select a gemset in the above command. This is where default lives and plays. When no gemset is selected, default becomes active and global totally disappears. To load default, you would modify $rvm_path/gemsets/default.gems as these are the list of gems to be installed into each interpreter's 'default' set. The other file there is 'global.gems'. This is used as you would surmise; to load a default set of gems whenever you install a new interpreter under RVM into the global gemset, which is shared by all other gemsets for that Ruby, but not for 'default'.
Please see https://rvm.beginrescueend.com/gemsets/basics/ for more information.

Resources