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.
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.
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.
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.
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.
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:
-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?
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.
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"
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?
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 :)
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.
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 :)
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!
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'.
[+] [-] rm445|15 years ago|reply
[+] [-] joshfng|15 years ago|reply
[+] [-] telemachos|15 years ago|reply
Why not just do this?
[+] [-] ryanbigg|15 years ago|reply
But if you've got one application running one version of Ruby, then this is definitely a perfect way to go.
[+] [-] cosgroveb|15 years ago|reply
http://ryanbigg.com/2010/12/ubuntu-ruby-rvm-rails-and-you
Sadly it languished with no upvotes. :( I found it extremely useful, however!
[+] [-] roxstar|15 years ago|reply
[+] [-] tibbon|15 years ago|reply
[+] [-] joshfng|15 years ago|reply
[deleted]
[+] [-] rmc|15 years ago|reply
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
Otherwise that line would be:
[+] [-] j2d2j2d2|15 years ago|reply
[+] [-] joshfng|15 years ago|reply
[+] [-] wayneeseguin|15 years ago|reply
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
-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
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
[+] [-] aonic|15 years ago|reply
[+] [-] mattyb|15 years ago|reply
-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
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
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
[+] [-] joshfng|15 years ago|reply
[+] [-] joshfng|15 years ago|reply
[+] [-] unknown|15 years ago|reply
[deleted]
[+] [-] DanI-S|15 years ago|reply
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
[+] [-] vysogot|15 years ago|reply
Debian has some differences.
[+] [-] fenderplayer|15 years ago|reply
/usr/local/bin/rvm: line 73: /home/myuser/.rvm/scripts/rvm: No such file or directory
Whats wrong here?
[+] [-] fenderplayer|15 years ago|reply
[+] [-] jschuur|15 years ago|reply
[+] [-] joshfng|15 years ago|reply
[+] [-] telemachos|15 years ago|reply
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
[+] [-] thibaut_barrere|15 years ago|reply
[+] [-] jseifer|15 years ago|reply
[+] [-] l3amm|15 years ago|reply