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

Changeset 1122

Show
Ignore:
Timestamp:
04/09/05 17:10:25 (4 years ago)
Author:
david
Message:

Described how to install and use CIA

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tools/cia/trunk/README

    r1114 r1122  
    1 == Welcome to Rails 
     1== CIA: Continuous Integration Automater 
    22 
    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. 
     3A continuous integration server has a hook into the version control system 
     4(Subversion in case of CIA) and when a commit is made it... 
    125 
    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. 
     61. Find a project that was matched by at least one of the checked in files 
     72. Checkout that entire project to a temporary directory 
     83. Run all unit and functional tests on the freshly checked out application 
     94. Send an email describing the errors if any occurred during the test run 
    2610 
    2711 
    28 == Requirements 
     12== Setting up the database 
    2913 
    30 * Database and driver (MySQL, PostgreSQL, or SQLite) 
    31 * Rake[http://rake.rubyforge.org] for running tests and the generating documentation 
     14CIA is a perfect fit for SQLite, but you can really use any database. SQLite is 
     15just so easy to use for such a small system. Initialize the database with: 
    3216 
    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 
     17  sqlite db/cia.sqlite # creates and loads the database 
     18  .read db/sqlite.sql  # creates the necessary tables 
    4519 
    4620 
    47 == Example for Apache conf 
     21== The post-commit hook 
    4822 
    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> 
     23Setting up CIA requires that you're on the same machine as the repository. If 
     24you haven't already activated the post-commit hook, then copy /path/to/repos/hooks/post-commit.tmpl 
     25to /path/to/repos/hooks/post-commit and add to the bottom of it: 
    6126 
    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)"