| 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. |
|---|
| | 6 | 1. Find a project that was matched by at least one of the checked in files |
|---|
| | 7 | 2. Checkout that entire project to a temporary directory |
|---|
| | 8 | 3. Run all unit and functional tests on the freshly checked out application |
|---|
| | 9 | 4. Send an email describing the errors if any occurred during the test run |
|---|
| 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. |
|---|
| | 27 | /path/to/cia/script/runner "Agent.build(\"$REPOS\", $REV)" |
|---|