top | item 2127610

Get Ruby and Rails running on Ubuntu with one command

56 points| adamstac | 15 years ago |thechangelog.com | reply

50 comments

order
[+] rm445|15 years ago|reply
Oblig. bash.org, http://www.bash.org/?464385

  <@insomnia> it only takes three commands to install Gentoo
  <@insomnia> cfdisk /dev/hda && mkfs.xfs /dev/hda1 && mount /dev/hda1 /mnt/gentoo/ && chroot /mnt/gentoo/ && env-update && . /etc/profile && emerge sync && cd /usr/portage && scripts/bootsrap.sh && emerge system && emerge vim && vi /etc/fstab && emerge gentoo-dev-sources && cd /usr/src/linux && make menuconfig && make install modules_install && emerge gnome mozilla-firefox openoffice && emerge grub && cp /boot/grub/grub.conf.sample /boot/grub/grub.conf && vi /boot/grub/grub.conf && grub && init 6
  <@insomnia> that's the first one
[+] joshfng|15 years ago|reply
haha updated to read "A setup script to get Ruby and Rails running on Ubuntu server in one line". The first draft of the script was one command originally.
[+] telemachos|15 years ago|reply
This strikes me as no easier than rvm, but less clean (installations go to /usr/local, no easy way to switch between various ruby interpreters or gemsets, harder to uninstall, etc.).

Why not just do this?

    1) Update whatever requirements you need via APT tool of choice.
    2) Install rvm
    3) Install ruby-1.9 using rvm
    4) gem install rails
    5) Write great rails app.
[+] ryanbigg|15 years ago|reply
It's not too often that you'll have a server that runs two applications. Sure, if that were the case then you would be using RVM in which case I would recommend following the guide already linked.

But if you've got one application running one version of Ruby, then this is definitely a perfect way to go.

[+] roxstar|15 years ago|reply
Is rvm commonly used for production or just development environments? I can see where having a script to get your production (or testing) environment up and running with minimal user work would be useful, but if this is meant for just development I agree with your point.
[+] tibbon|15 years ago|reply
Hmm, maybe putting together a oneliner for that would help a lot of people. Added to my todo list.
[+] rmc|15 years ago|reply
That is many commands, but it's only one line.

And there's something in the inner-sysadmin in me that sees "curl http://example.com/foo.sh && ./foo.sh" and shudders. That sounds like a receipe for disaster.

[+] bad_user|15 years ago|reply
It's a bitch rubygems are so fucked up on Debian/Ubuntu and that Ruby 1.9.2 is still not in Ubuntu's repo.

Otherwise that line would be:

     sudo aptitude install ruby1.9.2-full && sudo gem install rails
[+] j2d2j2d2|15 years ago|reply
Nothing wrong with reading the script before running it. :)
[+] joshfng|15 years ago|reply
Feel free to read the script before executing it :)
[+] wayneeseguin|15 years ago|reply
Here is a script that I wrote and have been using, should work on most Linux's and OSX to bootstrap a Rails Development environment. Also ensures that git is installed. You can run it with one command (after reading it's contents of course) as follows:

curl -O https://github.com/wayneeseguin/rvm/blob/master/contrib/boot... && source bootstrap_rails_environment

This automates installing the prerequisites across many Linux package management types and then bootstraps a Rails development environment using RVM.

[+] mattyb|15 years ago|reply
A few questions:

-Why Ruby 1.8.7 and not 1.9.2?

-I've installed 1.8.7, 1.9.2 & 1.9.2-head via RVM without having libyaml-dev or libffi-dev installed (I see they're listed in `rvm notes`). Any idea what's up here?

Thanks!

[+] Dobbs|15 years ago|reply
Couldn't you just do:

wget https://github.com/joshfng/railsready/raw/master/railsready.... && bash ./railsready.sh

Besides the "1" command is really 4.

If you are setting up enough VM's that you need this you should have something like puppet installed and don't need this. If you are setting up one machine then do it by hand. Know the tools you have installed and keep track of them it will make deployment easier.

[+] joshfng|15 years ago|reply
This isn't meant for huge deployments or rollouts. I use it to setup testing servers that mimic production boxes. And yea it should ready "setup rails with one line"
[+] aonic|15 years ago|reply
Or:

  wget -qO- https://github.com/joshfng/railsready/raw/master/railsready.sh | /bin/bash
[+] mattyb|15 years ago|reply
Some comments & questions from someone who's worked on something similar:

-What's extglob used here for? I don't see any regexes.

-What are libffi-dev and libyaml-dev for? I assume some common gems depend on them. If so, which? (I'm just getting into Rails.)

-Git in the Maverick repos is old (1.7.1, which was released in April). Installing it from source is probably a better idea.

-You should probably use RVM to install Ruby, since its 1.9.2-head target won't require you to keep updating your script with 1.9.2's patchlevel.

-In my rails3.sh (which I should really publish), I didn't need to `gem install bundler` in order for `bundle install` to work. Probably because `rails` depends on `bundler`.

-That sudo check is neat, and I'd like to lift it; what's this script's license?

[+] joshfng|15 years ago|reply
extglob is in there for future improvements. I plan to make it robust enough to accept parameters in the future.

When building Ruby the output complained about some missing deps. libffi-dev and libyaml-dev made Ruby stop complaining about them :)

Bundler is installed on the system because you don't have to install Rails on the system. You could simply put Ruby on there, install bundler then when you upload your app and run "bundle" it will pull down Rails and any gems your app depends on. Having Bundler available on the system is needed if you don't install the Rails gem system wide.

Use the script however you see fit and feel free to take from it what you like :)

[+] calvin|15 years ago|reply
Note to the wise: do not run this on a production machine unless you understand the full consequences of what the script is doing.

This is great for starting out a new machine and getting things setup, but running the update and upgrade commands without consideration of what's being updated could cause a lot of headaches if any existing sites running on the server have dependencies that are botched by the upgrade.

[+] joshfng|15 years ago|reply
The README advises to run on a fresh install. Install Ubuntu, run railsready, have fun :)
[+] joshfng|15 years ago|reply
Just so you guys know this script has changed a lot since I opened it up. It now has way better output formatting, the option to install Ruby from source or RVM, better stdout and stderr redirection to the install.log and even captures signals for things like ctrl-c to kill the script nicely. Thanks for all the input and I hope it's found to be useful :)
[+] joshfng|15 years ago|reply
This also installs git, I updated the readme. It's a very simple script so if you guys see any ways to improve it let me know.
[+] DanI-S|15 years ago|reply
Nice! It'd be nicer if it used RVM, though. Might try rolling my own.

If anyone else wants to try, or is otherwise interested, I wrote a step-by-step guide to getting Rails on Ubuntu with RVM: http://news.ycombinator.com/item?id=2113525

[+] joshfng|15 years ago|reply
It offers the choice now of build from source or RVM
[+] fenderplayer|15 years ago|reply
I just ran the script on Ubuntu 10.10 (64bit) but when i run "rvm list" or any other rvm command i get the following error:

/usr/local/bin/rvm: line 73: /home/myuser/.rvm/scripts/rvm: No such file or directory

Whats wrong here?

[+] fenderplayer|15 years ago|reply
ok... i had run the script as root and was trying to run as a normal user, thats why the error....fixed now
[+] joshfng|15 years ago|reply
Just a FYI I changed the script to install Ruby to /usr/local thanks to some input from a Github user. Also people are forking it and setting it up to install RVM so feel free to check those out as well!
[+] telemachos|15 years ago|reply
I believe your earlier version already was installing to /usr/local. You've just made it explicit. Most configuration scripts accept a --prefix option, but default to /usr/local if you omit the option. I'm pretty sure that Ruby works that way, and it's exceedingly common. (Not that the explicitness isn't a good idea. You don't want to rely on a default without being sure.)

Follow-up: partial output of ./configure --help in a Ruby source directory:

> By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc. You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'.

[+] joshfng|15 years ago|reply
I have updated the script to ask you if you want to build Ruby from source or install RVM (Wayne from RVM pointed me in the right direction)
[+] thibaut_barrere|15 years ago|reply
I now prefer using chef-solo, which allows to tweak and add the remaining bits very quickly once you know how to use it!
[+] jseifer|15 years ago|reply
Wish this was around a week ago when I did this all manually.
[+] l3amm|15 years ago|reply
Agreed, now if only someone could write the one line command to robustly install couchdb on ubuntu.