Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

root/tags/rel_0-13-1/railties/README

Revision 1025, 6.9 kB (checked in by david, 4 years ago)

Fixed doc links

Line 
1 == Welcome to Rails
2
3 Rails is a web-application and persistance framework that includes everything
4 needed to create database-backed web-applications according to the
5 Model-View-Control pattern of separation. This pattern splits the view (also
6 called the presentation) into "dumb" templates that are primarily responsible
7 for inserting pre-build data in between HTML tags. The model contains the
8 "smart" domain objects (such as Account, Product, Person, Post) that holds all
9 the business logic and knows how to persist themselves to a database. The
10 controller handles the incoming requests (such as Save New Account, Update
11 Product, Show Post) by manipulating the model and directing data to the view.
12
13 In Rails, the model is handled by what's called a object-relational mapping
14 layer entitled Active Record. This layer allows you to present the data from
15 database rows as objects and embellish these data objects with business logic
16 methods. You can read more about Active Record in
17 link:files/vendor/rails/activerecord/README.html.
18
19 The controller and view is handled by the Action Pack, which handles both
20 layers by its two parts: Action View and Action Controller. These two layers
21 are bundled in a single package due to their heavy interdependence. This is
22 unlike the relationship between the Active Record and Action Pack that is much
23 more separate. Each of these packages can be used independently outside of
24 Rails.  You can read more about Action Pack in
25 link:files/vendor/rails/actionpack/README.html.
26
27
28 == Requirements
29
30 * Database and driver (MySQL, PostgreSQL, or SQLite)
31 * Rake[http://rake.rubyforge.org] for running tests and the generating documentation
32
33 == Optionals
34
35 * Apache 1.3.x or 2.x or lighttpd 1.3.11+ (or any FastCGI-capable webserver with a
36   mod_rewrite-like module)
37 * FastCGI (or mod_ruby) for better performance on Apache
38
39 == Getting started
40
41 1. Run the WEBrick servlet: <tt>ruby script/server</tt>
42    (run with --help for options)
43 2. Go to http://localhost:3000/ and get "Congratulations, you've put Ruby on Rails!"
44 3. Follow the guidelines on the "Congratulations, you've put Ruby on Rails!" screen
45
46
47 == Example for Apache conf
48
49   <VirtualHost *:80>
50     ServerName rails
51     DocumentRoot /path/application/public/
52     ErrorLog /path/application/log/server.log
53  
54     <Directory /path/application/public/>
55       Options ExecCGI FollowSymLinks
56       AllowOverride all
57       Allow from all
58       Order allow,deny
59     </Directory>
60   </VirtualHost>
61
62 NOTE: Be sure that CGIs can be executed in that directory as well. So ExecCGI
63 should be on and ".cgi" should respond. All requests from 127.0.0.1 goes
64 through CGI, so no Apache restart is necessary for changes. All other requests
65 goes through FCGI (or mod_ruby) that requires restart to show changes.
66
67
68 == Example for lighttpd conf (with FastCGI)
69
70   server.port = 8080
71   server.bind = "127.0.0.1"
72   # server.event-handler = "freebsd-kqueue" # needed on OS X
73  
74   server.modules = ( "mod_rewrite", "mod_fastcgi" )
75  
76   url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )
77   server.error-handler-404 = "/dispatch.fcgi"
78  
79   server.document-root = "/path/application/public"
80   server.errorlog      = "/path/application/log/server.log"
81  
82   fastcgi.server = ( ".fcgi" =>
83     ( "localhost" =>
84         (
85           "min-procs" => 1,
86           "max-procs" => 5,
87           "socket"   => "/tmp/application.fcgi.socket",
88           "bin-path" => "/path/application/public/dispatch.fcgi",
89           "bin-environment" => ( "RAILS_ENV" => "development" )
90         )
91     )
92   )
93  
94
95 == Debugging Rails
96
97 Have "tail -f" commands running on both the server.log, production.log, and
98 test.log files. Rails will automatically display debugging and runtime
99 information to these files. Debugging info will also be shown in the browser
100 on requests from 127.0.0.1.
101
102
103 == Breakpoints
104
105 Breakpoint support is available through the script/breakpointer client. This
106 means that you can break out of execution at any point in the code, investigate
107 and change the model, AND then resume execution! Example:
108
109   class WeblogController < ActionController::Base
110     def index
111       @posts = Post.find_all
112       breakpoint "Breaking out from the list"
113     end
114   end
115  
116 So the controller will accept the action, run the first line, then present you
117 with a IRB prompt in the breakpointer window. Here you can do things like:
118
119 Executing breakpoint "Breaking out from the list" at .../webrick_server.rb:16 in 'breakpoint'
120
121   >> @posts.inspect
122   => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
123        #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
124   >> @posts.first.title = "hello from a breakpoint"
125   => "hello from a breakpoint"
126
127 ...and even better is that you can examine how your runtime objects actually work:
128
129   >> f = @posts.first
130   => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
131   >> f.
132   Display all 152 possibilities? (y or n)
133
134 Finally, when you're ready to resume execution, you press CTRL-D
135
136
137 == Console
138
139 You can interact with the domain model by starting the console through script/console.
140 Here you'll have all parts of the application configured, just like it is when the
141 application is running. You can inspect domain models, change values, and save to the
142 database. Start the script without arguments will launch it in the development environment.
143 Passing an argument will specify a different environment, like <tt>console production</tt>.
144
145
146 == Description of contents
147
148 app
149   Holds all the code that's specific to this particular application.
150
151 app/controllers
152   Holds controllers that should be named like weblog_controller.rb for
153   automated URL mapping. All controllers should descend from
154   ActionController::Base.
155
156 app/models
157   Holds models that should be named like post.rb.
158   Most models will descent from ActiveRecord::Base.
159  
160 app/views
161   Holds the template files for the view that should be named like
162   weblog/index.rhtml for the WeblogController#index action. All views uses eRuby
163   syntax. This directory can also be used to keep stylesheets, images, and so on
164   that can be symlinked to public.
165  
166 app/helpers
167   Holds view helpers that should be named like weblog_helper.rb.
168
169 config
170   Configuration files for the Rails environment, the routing map, the database, and other dependencies.
171
172 components
173   Self-contained mini-applications that can bundle controllers, models, and views together.
174
175 lib
176   Application specific libraries. Basically, any kind of custom code that doesn't
177   belong controllers, models, or helpers. This directory is in the load path.
178    
179 public
180   The directory available for the web server. Contains sub-directories for images, stylesheets,
181   and javascripts. Also contains the dispatchers and the default HTML files.
182
183 script
184   Helper scripts for automation and generation.
185
186 test
187   Unit and functional tests along with fixtures.
188
189 vendor
190   External libraries that the application depend on. This directory is in the load path.
Note: See TracBrowser for help on using the browser.