Posts Tagged: Ruby


29
Sep 09

Ruby On Rails for .NET Developers (Part 1)

In this short series of posts I will document some of the steps required for an experienced .NET developer to get the most out Ruby On Rails.

Getting used to life without Visual Studio

Visual Studio really is a great IDE, in fact it is probably the best IDE I have ever used. And as a .NET developer moving from C# ASP.NET (or ASP.NET MVC) you are really going to miss the Visual Studio IDE, in fact you will at some point during your first few days without it, you will question question your decision to try another toolset.

In my experience of seeing .NET developers use Rails those that get past those first few days without the IDE make really good rails developers.

The Rails Way, Saves the Day!

Initially the lack of a great IDE can seem a real down point however, once you appreciate the mind set of a rails developer you will see that life does indeed go on without Visual Studio.

Life as a Rails developer is about designing beautiful interfaces with simple and intuitive user experiences, less of your time will be spent on heavy lifting

NOTE: At this point I should say that many “Good” IDE’s are available for Rails development, and I will mention some of them in a second ;-)

Getting Started

For the remainder of this series I will assume that you are going to continue developing on Windows, and as such will only mention tools that are available on Windows, but i strongly recommend that if you get chance to develop software using a Mac you do so, its very liberating….

To Develop Ruby on Rails apps you are going to need:

  • A Ruby Environment
  • Rails (as in Ruby on Rails)
  • A Database
  • A way to edit files (An IDE Maybe ;-)
  • An open mind (optional, but recommended)

Ruby Environment

This is really easy, go to Google and search for the Ruby One Click Installer, this simple installer will give you all you need to get started with Ruby.

One thing you will notice when developing in Ruby is the amount of time you spend in a Console Window, so lets start right now… Open a Command Prompt (Start->Run->CMD) and type the following:

  ruby -v

If your Ruby One Click installation was successful you should see something like:

ruby 1.8.6 (2007-08-11 patchlevel 111)

Don’t worry if the numbers on your system are slightly different, we are just confirming that you have a Ruby environment and it looks like you do ;-)

Rails

Ruby has a nice packaging mechanism called GEMs which is similar to package management systems on linux operating systems (apt-get) but for many .NET developers who are not exposed to Linux, its a pretty new concept, one that might even seem like a step backwards but don’t let the simplicity of it fool you, its a great system and will make you take a second look at that ‘Add/Remove programs’ dialog that you are used to using.

The One Click Installer was good enough to instal Gem for you, all you need to do is update it using the following command (command prompt again):

  gem update --system

This command (when complete) will have updated your Gem version to something equal to or greater than 1.5.3 (Depending on how old this article is when you read it), you can test this with the following command:

  gem -v

Your now ready to install rails with the following command:

gem install rails

This command will take a few minutes to complete but once it has you have almost all you need to build your first Rails app! Remember how long it took to install Visual Studio?

A Database

Rails will change the way you think about Database’s, which may or may not be a good thing but to fully embrace rails you may need to leave some of your old database habits at the door.

For this series of posts i’m going to use Mysql, and you should too (if your following along at home), but Rails works with SQLite, Mysql, PostgreSQL, SQL Server, Oracle, and more (i guess)
Go to the Mysql site and download Mysql Community Server (i’m currently using version 5.0) and while you are there get the GUI tools.

A Way to Edit Files (And IDE Maybe ;-)

I told you i would mention some Rails IDE’s… well you have a few options ranging from a simple Text editor like Notepad++ or Scintilla (this comes with the One Click Installer) to a “fully fledged” IDE like Netbeans (FREE) or RubyMine (by JetBrains, PAID).
The final choice on IDE’s is one that you have to make alone, but many of the rails guides that you come across on the WEB will assume that you are using a simple Text Editor and the Command Prompt, once you get experienced you will of course learn to love the refactoring and code completion features of IDE’s like RubyMine, but until then i recommend that you try to use your choice of IDE as a text editor and leave the “integrated” features alone.

For example I’m going to use Netbeans for these posts, but i’m not going to use any of the built in features, because they overlap many of the Command Prompt based commands that you will see referenced in this and other tutorials, once you are comfortable with them the choice is yours.

So go to www.netbeans.com and get the latest version of NetBeans

An Open Mind

Ruby (and Rails) will introduce you to a somewhat different approach to software design, you will at first find it hard to let go, particularly if you are the type of developer who thinks in terms of Interfaces and Object Orientation, Rails simply takes a lot of this out of the equation, within a few days you will think of your project in terms of User Interactions and models, which is great because it’s a nice “Agile” way to work.

Part 2

OK! Thats enough for Part 1, you now have the tools, next time I will go though the process of building and running a Rails app.

My aim with these posts is to create an app that you would have created in .NET, therefor i’m going to create a Rails version of the Time Tracking ASP.NET Starter Kit. You may have already come across this on the APS.NET Starter Kit site Time Track Web Site Starter Kit Does. Now it’s important to that i’m not going to look at the code, i’m simply going to look at the app and build in Rails using a nice Agile approach.

See you in part 2 ;-)

My name is Floyd Price, I’m a software developer (and MD an Tea boy) at Component Workshop a small software company in the UK, if you have any questions please let me know at floyd[at]componentworkshop[dot]com.


5
Feb 08

Streaming Files to the Browser with Ruby on rails

Quite often when building a web application you need to store and send Documents, with ruby on rails, streaming files from your application to the browser is simple.


def download_file
    @document = Document.find(params[:id])
    # this is where the magic happens...
    send_file @document.file_location
end

This single line of code will stream a file from your servers filesystem directly to your browser.

The simple use described above is often enough but you have even further control over the file with the following options:

Options:

  • :filename – suggests a filename for the browser to use.
    Defaults to File.basename(path).
  • :type – specifies an HTTP content type.
    Defaults to ‘application/octet-stream’.
  • :disposition – specifies whether the file will be shown inline or downloaded.
    Valid values are ‘inline’ and ‘attachment’ (default).
  • :stream – whether to send the file to the user agent as it is read (true)
    or to read the entire file before sending (false). Defaults to true.
  • :buffer_size – specifies size (in bytes) of the buffer used to stream the file.
    Defaults to 4096.
  • :status – specifies the status code to send with the response. Defaults to ‘200 OK’.
  • :url_based_filename – set to true if you want the browser guess the filename from
    the URL, which is necessary for i18n filenames on certain browsers
    (setting :filename overrides this option).

Pay particular notice to the :disposition option, changing this from its default to ‘inline’ will enable you to display the contents of the file in the browser window rather than downloading it as an attachment.

def download_file
    @document = Document.find(params[:id])
    # this is where the magic happens (inline)...
    send_file @document.file_location, :disposition => "inline"
end

This is especially useful for things like word or excel documents when you know you target audience can read these in the browser.

EDGE RAILS

If you are brave enough to live on the Edge with Edge Rails you will get an extra treat for free, on Edge Rails the send_file method passes the correct information to your balancing server to allow it to stream the file rather than blocking your mongrel server.