Difference between revisions of "Ruby"
m (→Bundler: It doesn't expand with quotes) |
Ichimonji10 (talk | contribs) (Added a one-liner for determining the value of GEM_HOME.) |
||
Line 70: | Line 70: | ||
Bundler seems to want to install gems system-wide, contrary to the current default behaviour of ''gem'' itself on Arch. To correct this, add the following line to your {{ic|~/.bashrc}}: | Bundler seems to want to install gems system-wide, contrary to the current default behaviour of ''gem'' itself on Arch. To correct this, add the following line to your {{ic|~/.bashrc}}: | ||
+ | export GEM_HOME=$(gem env | grep 'INSTALLATION DIRECTORY' | sed 's/.*INSTALLATION DIRECTORY: \(.*\)/\1/') | ||
+ | |||
+ | The above determines which directory {{ic|gem}} installs gems into, then tells bundler to install gems into the same directory. The above will resolve to something like this: | ||
export GEM_HOME=~/.gem/ruby/1.9.3 | export GEM_HOME=~/.gem/ruby/1.9.3 | ||
Revision as of 18:32, 25 March 2013
Ruby is a dynamic, interpreted, open source programming language with a focus on simplicity and productivity.
Contents
Installing Ruby
The version of Ruby you need to install depends on your requirements, as not all 3rd party code is compatible with all versions. Here is a summary of the versions below and how to get them:
Ruby 1.9.3 (Stable)
Summary: Ruby 1.9 is recommended usage for new projects.
Pros:
- Vastly improved performance over 1.8
- New features for concurrency such as fibers.
- Various other language improvements, such as an improved CSV parser.
Cons:
- Not compatible with many older gems (and Ruby On Rails versions prior to 2.3)
- Changes in the language might cause older Ruby code not to run, or exhibit unexpected bugs.
To install Ruby 1.9, simply install ruby.
Ruby 1.9 also includes RubyGems (detailed below), so you can easily update to the latest RubyGems using:
# gem update --system
Ruby 1.8.7 (Deprecated)
Summary: Use Ruby 1.8.7 with any incompatible or out of date code as necessary.
Last stable version of 1.8, which is incompatible with 1.9. However, there is still code that is based on it.
You can install ruby-1.8.7-svnAUR or ruby1.8AUR from the AUR.
RubyGems is not included with the ruby1.8AUR package, so install rubygems1.8AUR from the AUR.
Multiple versions
If you want to run multiple versions on the same system (e.g. 1.9.3 and 1.8.7), the easiest way is to use RVM or rbenv.
RubyGems
gem is the package manager of sorts for Ruby modules (called Gems), somewhat comparable to what pacman is to Arch Linux. The gem command will be installed if you followed the installation instructions above.
Running as normal user
When running gem as a user, the gems will be installed into ~/.gem
and not affect anyone else, although it might be worth noting that not all gems are happy with being installed in this way, and might insist on being installed by root (especially if they have native extensions). This is considered the best way to manage gems on Arch.
To use gems which install binaries, you need to add ~/.gem/ruby/1.9.3/bin
to your $PATH
.
This per-user behavior is enabled via /etc/gemrc
and can be overridden by a ~/.gemrc
file.
Running as root
When running as root, the gems will be installed into /root/.gems
and will not be installed to /usr/lib/ruby/gems/
.
Bundler solves these problems to some extent by packaging gems into your application. See the section below on using bundler.
Updating RubyGems
$ gem update
Installing a gem
This example installs the MySQL ruby gem:
$ gem install mysql
The process can be sped up somewhat if you do not need local documentation:
$ gem install mysql --no-rdoc --no-ri
The gem will now be downloaded, compiled if necessary, and installed.
Bundler
Bundler installs gems (including those with native extensions) directly into your application, which works very well for shared hosting and easy deployment of Ruby on Rails applications for example. Bundler also resolves dependencies as a whole, rather than individually like RubyGems, making things a lot easier. To install:
$ gem install bundler
Bundler seems to want to install gems system-wide, contrary to the current default behaviour of gem itself on Arch. To correct this, add the following line to your ~/.bashrc
:
export GEM_HOME=$(gem env | grep 'INSTALLATION DIRECTORY' | sed 's/.*INSTALLATION DIRECTORY: \(.*\)/\1/')
The above determines which directory gem
installs gems into, then tells bundler to install gems into the same directory. The above will resolve to something like this:
export GEM_HOME=~/.gem/ruby/1.9.3
To start a new bundle:
$ bundle init
Then add your required gems into "Gemfile" in the current directory (created by bundle init):
Gemfile
gem "rails", "3.2.9" gem "mysql"
Finally, run the following to install your gems:
$ bundle install
Or, alternatively, in order to install locally to .bundle
under the working directory:
$ bundle install --path .bundle
Managing RubyGems using pacman
Instead of using the gem command directly you can use pacman to manage the installed gems like normal packages. There are a lot of ruby packages available from AUR. Ruby packages follow the naming convention ruby-[gemname]. As an alternative you can use the tool pacgemAUR which automatically creates arch packages from gems and installs them afterwards using pacman.
--no-user-install
or --user-install
command line switches, bypassing the global setting found in /etc/gemrc
or the users own ~/.gemrc
. You're editing the PKGBUILD file before you install, right?See also
References
- Ruby - http://ruby-lang.org/
- Rubyforge - http://rubyforge.org
- Bundler - http://github.com/carlhuda/bundler