257 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			257 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | == Welcome to Rails | ||
|  | 
 | ||
|  | Rails is a web-application framework that includes everything needed to create | ||
|  | database-backed web applications according to the Model-View-Control pattern. | ||
|  | 
 | ||
|  | This pattern splits the view (also called the presentation) into "dumb" | ||
|  | templates that are primarily responsible for inserting pre-built data in between | ||
|  | HTML tags. The model contains the "smart" domain objects (such as Account, | ||
|  | Product, Person, Post) that holds all the business logic and knows how to | ||
|  | persist themselves to a database. The controller handles the incoming requests | ||
|  | (such as Save New Account, Update Product, Show Post) by manipulating the model | ||
|  | and directing data to the view. | ||
|  | 
 | ||
|  | In Rails, the model is handled by what's called an object-relational mapping | ||
|  | layer entitled Active Record. This layer allows you to present the data from | ||
|  | database rows as objects and embellish these data objects with business logic | ||
|  | methods. You can read more about Active Record in | ||
|  | link:files/vendor/rails/activerecord/README.html. | ||
|  | 
 | ||
|  | The controller and view are handled by the Action Pack, which handles both | ||
|  | layers by its two parts: Action View and Action Controller. These two layers | ||
|  | are bundled in a single package due to their heavy interdependence. This is | ||
|  | unlike the relationship between the Active Record and Action Pack that is much | ||
|  | more separate. Each of these packages can be used independently outside of | ||
|  | Rails. You can read more about Action Pack in | ||
|  | link:files/vendor/rails/actionpack/README.html. | ||
|  | 
 | ||
|  | 
 | ||
|  | == Getting Started | ||
|  | 
 | ||
|  | 1. At the command prompt, create a new Rails application: | ||
|  |        <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name) | ||
|  | 
 | ||
|  | 2. Change directory to <tt>myapp</tt> and start the web server: | ||
|  |        <tt>cd myapp; rails server</tt> (run with --help for options) | ||
|  | 
 | ||
|  | 3. Go to http://localhost:3000/ and you'll see: | ||
|  |        "Welcome aboard: You're riding Ruby on Rails!" | ||
|  | 
 | ||
|  | 4. Follow the guidelines to start developing your application. You can find | ||
|  | the following resources handy: | ||
|  | 
 | ||
|  | * The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html | ||
|  | * Ruby on Rails Tutorial Book: http://www.railstutorial.org/ | ||
|  | 
 | ||
|  | 
 | ||
|  | == Debugging Rails | ||
|  | 
 | ||
|  | Sometimes your application goes wrong. Fortunately there are a lot of tools that | ||
|  | will help you debug it and get it back on the rails. | ||
|  | 
 | ||
|  | First area to check is the application log files. Have "tail -f" commands | ||
|  | running on the server.log and development.log. Rails will automatically display | ||
|  | debugging and runtime information to these files. Debugging info will also be | ||
|  | shown in the browser on requests from 127.0.0.1. | ||
|  | 
 | ||
|  | You can also log your own messages directly into the log file from your code | ||
|  | using the Ruby logger class from inside your controllers. Example: | ||
|  | 
 | ||
|  |   class WeblogController < ActionController::Base | ||
|  |     def destroy | ||
|  |       @weblog = Weblog.find(params[:id]) | ||
|  |       @weblog.destroy | ||
|  |       logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  | The result will be a message in your log file along the lines of: | ||
|  | 
 | ||
|  |   Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! | ||
|  | 
 | ||
|  | More information on how to use the logger is at http://www.ruby-doc.org/core/ | ||
|  | 
 | ||
|  | Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are | ||
|  | several books available online as well: | ||
|  | 
 | ||
|  | * Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) | ||
|  | * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) | ||
|  | 
 | ||
|  | These two books will bring you up to speed on the Ruby language and also on | ||
|  | programming in general. | ||
|  | 
 | ||
|  | 
 | ||
|  | == Debugger | ||
|  | 
 | ||
|  | Debugger support is available through the debugger command when you start your | ||
|  | Mongrel or WEBrick server with --debugger. This means that you can break out of | ||
|  | execution at any point in the code, investigate and change the model, and then, | ||
|  | resume execution! You need to install ruby-debug to run the server in debugging | ||
|  | mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example: | ||
|  | 
 | ||
|  |   class WeblogController < ActionController::Base | ||
|  |     def index | ||
|  |       @posts = Post.find(:all) | ||
|  |       debugger | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  | So the controller will accept the action, run the first line, then present you | ||
|  | with a IRB prompt in the server window. Here you can do things like: | ||
|  | 
 | ||
|  |   >> @posts.inspect | ||
|  |   => "[#<Post:0x14a6be8 | ||
|  |           @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>, | ||
|  |        #<Post:0x14a6620 | ||
|  |           @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]" | ||
|  |   >> @posts.first.title = "hello from a debugger" | ||
|  |   => "hello from a debugger" | ||
|  | 
 | ||
|  | ...and even better, you can examine how your runtime objects actually work: | ||
|  | 
 | ||
|  |   >> f = @posts.first | ||
|  |   => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}> | ||
|  |   >> f. | ||
|  |   Display all 152 possibilities? (y or n) | ||
|  | 
 | ||
|  | Finally, when you're ready to resume execution, you can enter "cont". | ||
|  | 
 | ||
|  | 
 | ||
|  | == Console | ||
|  | 
 | ||
|  | The console is a Ruby shell, which allows you to interact with your | ||
|  | application's domain model. Here you'll have all parts of the application | ||
|  | configured, just like it is when the application is running. You can inspect | ||
|  | domain models, change values, and save to the database. Starting the script | ||
|  | without arguments will launch it in the development environment. | ||
|  | 
 | ||
|  | To start the console, run <tt>rails console</tt> from the application | ||
|  | directory. | ||
|  | 
 | ||
|  | Options: | ||
|  | 
 | ||
|  | * Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications | ||
|  |   made to the database. | ||
|  | * Passing an environment name as an argument will load the corresponding | ||
|  |   environment. Example: <tt>rails console production</tt>. | ||
|  | 
 | ||
|  | To reload your controllers and models after launching the console run | ||
|  | <tt>reload!</tt> | ||
|  | 
 | ||
|  | More information about irb can be found at: | ||
|  | link:http://www.rubycentral.com/pickaxe/irb.html | ||
|  | 
 | ||
|  | 
 | ||
|  | == dbconsole | ||
|  | 
 | ||
|  | You can go to the command line of your database directly through <tt>rails | ||
|  | dbconsole</tt>. You would be connected to the database with the credentials | ||
|  | defined in database.yml. Starting the script without arguments will connect you | ||
|  | to the development database. Passing an argument will connect you to a different | ||
|  | database, like <tt>rails dbconsole production</tt>. Currently works for MySQL, | ||
|  | PostgreSQL and SQLite 3. | ||
|  | 
 | ||
|  | == Description of Contents | ||
|  | 
 | ||
|  | The default directory structure of a generated Ruby on Rails application: | ||
|  | 
 | ||
|  |   |-- app | ||
|  |   |   |-- controllers | ||
|  |   |   |-- helpers | ||
|  |   |   |-- mailers | ||
|  |   |   |-- models | ||
|  |   |   `-- views | ||
|  |   |       `-- layouts | ||
|  |   |-- config | ||
|  |   |   |-- environments | ||
|  |   |   |-- initializers | ||
|  |   |   `-- locales | ||
|  |   |-- db | ||
|  |   |-- doc | ||
|  |   |-- lib | ||
|  |   |   `-- tasks | ||
|  |   |-- log | ||
|  |   |-- public | ||
|  |   |   |-- images | ||
|  |   |   |-- javascripts | ||
|  |   |   `-- stylesheets | ||
|  |   |-- script | ||
|  |   |-- test | ||
|  |   |   |-- fixtures | ||
|  |   |   |-- functional | ||
|  |   |   |-- integration | ||
|  |   |   |-- performance | ||
|  |   |   `-- unit | ||
|  |   |-- tmp | ||
|  |   |   |-- cache | ||
|  |   |   |-- pids | ||
|  |   |   |-- sessions | ||
|  |   |   `-- sockets | ||
|  |   `-- vendor | ||
|  |       `-- plugins | ||
|  | 
 | ||
|  | app | ||
|  |   Holds all the code that's specific to this particular application. | ||
|  | 
 | ||
|  | app/controllers | ||
|  |   Holds controllers that should be named like weblogs_controller.rb for | ||
|  |   automated URL mapping. All controllers should descend from | ||
|  |   ApplicationController which itself descends from ActionController::Base. | ||
|  | 
 | ||
|  | app/models | ||
|  |   Holds models that should be named like post.rb. Models descend from | ||
|  |   ActiveRecord::Base by default. | ||
|  | 
 | ||
|  | app/views | ||
|  |   Holds the template files for the view that should be named like | ||
|  |   weblogs/index.html.erb for the WeblogsController#index action. All views use | ||
|  |   eRuby syntax by default. | ||
|  | 
 | ||
|  | app/views/layouts | ||
|  |   Holds the template files for layouts to be used with views. This models the | ||
|  |   common header/footer method of wrapping views. In your views, define a layout | ||
|  |   using the <tt>layout :default</tt> and create a file named default.html.erb. | ||
|  |   Inside default.html.erb, call <% yield %> to render the view using this | ||
|  |   layout. | ||
|  | 
 | ||
|  | app/helpers | ||
|  |   Holds view helpers that should be named like weblogs_helper.rb. These are | ||
|  |   generated for you automatically when using generators for controllers. | ||
|  |   Helpers can be used to wrap functionality for your views into methods. | ||
|  | 
 | ||
|  | config | ||
|  |   Configuration files for the Rails environment, the routing map, the database, | ||
|  |   and other dependencies. | ||
|  | 
 | ||
|  | db | ||
|  |   Contains the database schema in schema.rb. db/migrate contains all the | ||
|  |   sequence of Migrations for your schema. | ||
|  | 
 | ||
|  | doc | ||
|  |   This directory is where your application documentation will be stored when | ||
|  |   generated using <tt>rake doc:app</tt> | ||
|  | 
 | ||
|  | lib | ||
|  |   Application specific libraries. Basically, any kind of custom code that | ||
|  |   doesn't belong under controllers, models, or helpers. This directory is in | ||
|  |   the load path. | ||
|  | 
 | ||
|  | public | ||
|  |   The directory available for the web server. Contains subdirectories for | ||
|  |   images, stylesheets, and javascripts. Also contains the dispatchers and the | ||
|  |   default HTML files. This should be set as the DOCUMENT_ROOT of your web | ||
|  |   server. | ||
|  | 
 | ||
|  | script | ||
|  |   Helper scripts for automation and generation. | ||
|  | 
 | ||
|  | test | ||
|  |   Unit and functional tests along with fixtures. When using the rails generate | ||
|  |   command, template test files will be generated for you and placed in this | ||
|  |   directory. | ||
|  | 
 | ||
|  | vendor | ||
|  |   External libraries that the application depends on. Also includes the plugins | ||
|  |   subdirectory. If the app has frozen rails, those gems also go here, under | ||
|  |   vendor/rails/. This directory is in the load path. |