Description:
Update README.rdoc
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r724:72dbff27fcc3 - - 1 file changed: 102 inserted, 229 deleted
@@ -1,261 +1,134 | |||||
|
1 | - == Welcome to Rails |
|
1 | + == Installation |
|
|
2 | + | ||
|
|
3 | + Installing cafe-grader can be done in the following steps. | ||
|
2 |
|
4 | ||
|
3 | - Rails is a web-application framework that includes everything needed to create |
|
5 | + 1. Set up database. We need MySQL 5 database name, username and password. |
|
4 | - database-backed web applications according to the Model-View-Control pattern. |
|
6 | + 2. Install RVM. cafe-grader runs on Ruby on Rails and the best way to install it is to use RVM. |
|
|
7 | + 3. Install necessary package for the system | ||
|
|
8 | + 4. Install cafe-grader from github | ||
|
|
9 | + 5. Deploy cafe-grader on apache with Phusion Passenger | ||
|
|
10 | + | ||
|
|
11 | + The detail of each step are provided as follows. | ||
|
5 |
|
12 | ||
|
6 | - This pattern splits the view (also called the presentation) into "dumb" |
|
13 | + === Install MySQL 5 |
|
7 | - templates that are primarily responsible for inserting pre-built data in between |
|
14 | + |
|
8 | - HTML tags. The model contains the "smart" domain objects (such as Account, |
|
15 | + Install MySQL server for the server. |
|
9 | - Product, Person, Post) that holds all the business logic and knows how to |
|
16 | + |
|
10 | - persist themselves to a database. The controller handles the incoming requests |
|
17 | + $ sudo apt install mysql-server |
|
11 | - (such as Save New Account, Update Product, Show Post) by manipulating the model |
|
||
|
12 | - and directing data to the view. |
|
||
|
13 |
|
18 | ||
|
14 | - In Rails, the model is handled by what's called an object-relational mapping |
|
19 | + Next, we will connect to mysql as root and set up the database. You can choose your DATABASENAME, USERNAME and PASSWORD. |
|
15 | - layer entitled Active Record. This layer allows you to present the data from |
|
20 | + |
|
16 | - database rows as objects and embellish these data objects with business logic |
|
21 | + sudo mysql -u root |
|
17 | - methods. You can read more about Active Record in |
|
22 | + |
|
18 | - link:files/vendor/rails/activerecord/README.html. |
|
23 | + mysql> create database DATABASENAME; |
|
|
24 | + Query OK, 1 row affected (0.00 sec) | ||
|
19 |
|
25 | ||
|
20 | - The controller and view are handled by the Action Pack, which handles both |
|
26 | + mysql> grant all privileges on grader.* to USERNAME@localhost identified by 'PASSWORD'; |
|
21 | - layers by its two parts: Action View and Action Controller. These two layers |
|
27 | + Query OK, 0 rows affected, 1 warning (0.00 sec) |
|
22 | - are bundled in a single package due to their heavy interdependence. This is |
|
28 | + |
|
23 | - unlike the relationship between the Active Record and Action Pack that is much |
|
29 | + mysql> flush privileges; |
|
24 | - more separate. Each of these packages can be used independently outside of |
|
30 | + Query OK, 0 rows affected (0.00 sec) |
|
25 | - Rails. You can read more about Action Pack in |
|
||
|
26 | - link:files/vendor/rails/actionpack/README.html. |
|
||
|
27 |
|
31 | ||
|
|
32 | + === Install RVM | ||
|
28 |
|
33 | ||
|
29 | - == Getting Started |
|
34 | + Since Ubuntu has dedicated package for RVM we will use that. Just follow instruction given in https://github.com/rvm/ubuntu_rvm. For your convenience, the step are reproduced here. |
|
|
35 | + | ||
|
|
36 | + First, we install necessary package for installing RVM. | ||
|
30 |
|
37 | ||
|
31 | - 1. At the command prompt, create a new Rails application: |
|
38 | + $ sudo apt install software-properties-common |
|
32 | - <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name) |
|
||
|
33 |
|
39 | ||
|
34 | - 2. Change directory to <tt>myapp</tt> and start the web server: |
|
40 | + Second, we add the custom PPA, update the system and install RVM. |
|
35 | - <tt>cd myapp; rails server</tt> (run with --help for options) |
|
||
|
36 |
|
41 | ||
|
37 | - 3. Go to http://localhost:3000/ and you'll see: |
|
42 | + $ sudo apt-add-repository -y ppa:rael-gc/rvm |
|
38 | - "Welcome aboard: You're riding Ruby on Rails!" |
|
43 | + $ sudo apt-get update |
|
|
44 | + $ sudo apt-get install rvm | ||
|
39 |
|
45 | ||
|
40 | - 4. Follow the guidelines to start developing your application. You can find |
|
46 | + This is very important. You have to logout and login again since RVM change a lots of system. |
|
41 | - the following resources handy: |
|
||
|
42 |
|
47 | ||
|
43 | - * The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html |
|
48 | + === Install necessary package |
|
44 | - * Ruby on Rails Tutorial Book: http://www.railstutorial.org/ |
|
49 | + |
|
|
50 | + $ sudo apt install libmysql-dev default-jdk unzip nodejs php7.2-cli apache2 dirmngr gnupg apache2-dev | ||
|
45 |
|
51 | ||
|
46 |
|
52 | ||
|
47 | - == Debugging Rails |
|
53 | + curl build-essential |
|
48 | - |
|
||
|
49 | - Sometimes your application goes wrong. Fortunately there are a lot of tools that |
|
||
|
50 | - will help you debug it and get it back on the rails. |
|
||
|
51 | - |
|
||
|
52 | - First area to check is the application log files. Have "tail -f" commands |
|
||
|
53 | - running on the server.log and development.log. Rails will automatically display |
|
||
|
54 | - debugging and runtime information to these files. Debugging info will also be |
|
||
|
55 | - shown in the browser on requests from 127.0.0.1. |
|
||
|
56 | - |
|
||
|
57 | - You can also log your own messages directly into the log file from your code |
|
||
|
58 | - using the Ruby logger class from inside your controllers. Example: |
|
||
|
59 | - |
|
||
|
60 | - class WeblogController < ActionController::Base |
|
||
|
61 | - def destroy |
|
||
|
62 | - @weblog = Weblog.find(params[:id]) |
|
||
|
63 | - @weblog.destroy |
|
||
|
64 | - logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") |
|
||
|
65 | - end |
|
||
|
66 | - end |
|
||
|
67 | - |
|
||
|
68 | - The result will be a message in your log file along the lines of: |
|
||
|
69 | - |
|
||
|
70 | - Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! |
|
||
|
71 | - |
|
||
|
72 | - More information on how to use the logger is at http://www.ruby-doc.org/core/ |
|
||
|
73 | - |
|
||
|
74 | - Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are |
|
||
|
75 | - several books available online as well: |
|
||
|
76 | - |
|
||
|
77 | - * Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) |
|
||
|
78 | - * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) |
|
||
|
79 | - |
|
||
|
80 | - These two books will bring you up to speed on the Ruby language and also on |
|
||
|
81 | - programming in general. |
|
||
|
82 | - |
|
||
|
83 | - |
|
||
|
84 | - == Debugger |
|
||
|
85 | - |
|
||
|
86 | - Debugger support is available through the debugger command when you start your |
|
||
|
87 | - Mongrel or WEBrick server with --debugger. This means that you can break out of |
|
||
|
88 | - execution at any point in the code, investigate and change the model, and then, |
|
||
|
89 | - resume execution! You need to install ruby-debug to run the server in debugging |
|
||
|
90 | - mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example: |
|
||
|
91 | - |
|
||
|
92 | - class WeblogController < ActionController::Base |
|
||
|
93 | - def index |
|
||
|
94 | - @posts = Post.all |
|
||
|
95 | - debugger |
|
||
|
96 | - end |
|
||
|
97 | - end |
|
||
|
98 | - |
|
||
|
99 | - So the controller will accept the action, run the first line, then present you |
|
||
|
100 | - with a IRB prompt in the server window. Here you can do things like: |
|
||
|
101 | - |
|
||
|
102 | - >> @posts.inspect |
|
||
|
103 | - => "[#<Post:0x14a6be8 |
|
||
|
104 | - @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>, |
|
||
|
105 | - #<Post:0x14a6620 |
|
||
|
106 | - @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]" |
|
||
|
107 | - >> @posts.first.title = "hello from a debugger" |
|
||
|
108 | - => "hello from a debugger" |
|
||
|
109 | - |
|
||
|
110 | - ...and even better, you can examine how your runtime objects actually work: |
|
||
|
111 | - |
|
||
|
112 | - >> f = @posts.first |
|
||
|
113 | - => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}> |
|
||
|
114 | - >> f. |
|
||
|
115 | - Display all 152 possibilities? (y or n) |
|
||
|
116 | - |
|
||
|
117 | - Finally, when you're ready to resume execution, you can enter "cont". |
|
||
|
118 |
|
54 | ||
|
119 |
|
55 | ||
|
120 | - == Console |
|
56 | + === Install cafe-grader |
|
|
57 | + | ||
|
|
58 | + First, ensure that RVM is installed correctly. | ||
|
|
59 | + | ||
|
|
60 | + If instead of this you get the following error, it is very likely that you have not use bash --login. | ||
|
|
61 | + | ||
|
|
62 | + Next, we will let the install script do the work of installing cafe-grader. Please prepare the DATABASENAME, USERNAME and PASSWORD as the script will ask for that. Make sure that you run the script from the home directory of the user. | ||
|
121 |
|
63 | ||
|
122 | - The console is a Ruby shell, which allows you to interact with your |
|
64 | + cafe@grader:~$ wget https://github.com/cafe-grader-team/cafe-grader-judge-scripts/raw/master/installer/install-ubuntu-18.04.sh |
|
123 | - application's domain model. Here you'll have all parts of the application |
|
65 | + cafe@grader:~$ . ./install-ubuntu-18.04.sh |
|
124 | - configured, just like it is when the application is running. You can inspect |
|
||
|
125 | - domain models, change values, and save to the database. Starting the script |
|
||
|
126 | - without arguments will launch it in the development environment. |
|
||
|
127 |
|
66 | ||
|
128 | - To start the console, run <tt>rails console</tt> from the application |
|
67 | + After installation is finished, grader is ready to run in development mode via WEBrick. We will try that by the following command which will start a grader accessible via http://localhost:3000/. You should try logging in to the system and verify that it is actually work. |
|
129 | - directory. |
|
68 | + |
|
|
69 | + cafe@grader:~/cafe_grader/web$ rails s | ||
|
|
70 | + | ||
|
|
71 | + We are almost done. The last step is to set up apache and Phusion so that cafe-grader is served by apache. | ||
|
130 |
|
72 | ||
|
131 | - Options: |
|
73 | + === Deploy cafe-grader on Phusion passenger via apache |
|
|
74 | + Basically, we will follow the instructions given in https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/apache/oss/bionic/install_passenger.html, which devided into two parts: Installing Passenger and deploying the app. | ||
|
|
75 | + | ||
|
|
76 | + Installing Passenger as a mod for apache and enable it. | ||
|
132 |
|
77 | ||
|
133 | - * Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications |
|
78 | + cafe@grader:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 |
|
134 | - made to the database. |
|
79 | + cafe@grader:~$ sudo apt-get install -y apt-transport-https ca-certificates |
|
135 | - * Passing an environment name as an argument will load the corresponding |
|
80 | + cafe@grader:~$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list' |
|
136 | - environment. Example: <tt>rails console production</tt>. |
|
81 | + cafe@grader:~$ sudo apt-get update |
|
|
82 | + cafe@grader:~$ sudo apt-get install -y libapache2-mod-passenger | ||
|
|
83 | + cafe@grader:~$ sudo a2enmod passenger | ||
|
137 |
|
84 | ||
|
138 | - To reload your controllers and models after launching the console run |
|
85 | + |
|
139 | - <tt>reload!</tt> |
|
86 | + cafe@grader:~$ sudo apache2ctl restart |
|
140 |
|
87 | ||
|
141 | - More information about irb can be found at: |
|
88 | + Finally, we should check that passenger is installed correctly. Run the following command and fix anything as suggested by the command. |
|
142 | - link:http://www.rubycentral.org/pickaxe/irb.html |
|
89 | + |
|
|
90 | + cafe@grader:~$ sudo /usr/bin/passenger-config validate-install | ||
|
|
91 | + | ||
|
143 |
|
92 | ||
|
144 |
|
93 | ||
|
145 | - == dbconsole |
|
94 | + Deploying the app. First, we determine the exact location of our ruby that is installed via RVM. |
|
146 | - |
|
||
|
147 | - You can go to the command line of your database directly through <tt>rails |
|
||
|
148 | - dbconsole</tt>. You would be connected to the database with the credentials |
|
||
|
149 | - defined in database.yml. Starting the script without arguments will connect you |
|
||
|
150 | - to the development database. Passing an argument will connect you to a different |
|
||
|
151 | - database, like <tt>rails dbconsole production</tt>. Currently works for MySQL, |
|
||
|
152 | - PostgreSQL and SQLite 3. |
|
||
|
153 | - |
|
||
|
154 | - == Description of Contents |
|
||
|
155 | - |
|
||
|
156 | - The default directory structure of a generated Ruby on Rails application: |
|
||
|
157 |
|
95 | ||
|
158 | - |-- app |
|
96 | + cafe@grader:~$ passenger-config about ruby-command |
|
159 | - | |-- assets |
|
97 | + passenger-config was invoked through the following Ruby interpreter: |
|
160 | - | |-- images |
|
98 | + Command: /home/cafe/.rvm/gems/ruby-2.3.7/wrappers/ruby |
|
161 | - | |-- javascripts |
|
99 | + Version: ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-linux] |
|
162 | - | `-- stylesheets |
|
100 | + To use in Apache: PassengerRuby /home/cafe/.rvm/gems/ruby-2.3.7/wrappers/ruby |
|
163 | - | |-- controllers |
|
101 | + To use in Nginx : passenger_ruby /home/cafe/.rvm/gems/ruby-2.3.7/wrappers/ruby |
|
164 | - | |-- helpers |
|
102 | + To use with Standalone: /home/cafe/.rvm/gems/ruby-2.3.7/wrappers/ruby /usr/bin/passenger start |
|
165 | - | |-- mailers |
|
||
|
166 | - | |-- models |
|
||
|
167 | - | `-- views |
|
||
|
168 | - | `-- layouts |
|
||
|
169 | - |-- config |
|
||
|
170 | - | |-- environments |
|
||
|
171 | - | |-- initializers |
|
||
|
172 | - | `-- locales |
|
||
|
173 | - |-- db |
|
||
|
174 | - |-- doc |
|
||
|
175 | - |-- lib |
|
||
|
176 | - | `-- tasks |
|
||
|
177 | - |-- log |
|
||
|
178 | - |-- public |
|
||
|
179 | - |-- script |
|
||
|
180 | - |-- test |
|
||
|
181 | - | |-- fixtures |
|
||
|
182 | - | |-- functional |
|
||
|
183 | - | |-- integration |
|
||
|
184 | - | |-- performance |
|
||
|
185 | - | `-- unit |
|
||
|
186 | - |-- tmp |
|
||
|
187 | - | |-- cache |
|
||
|
188 | - | |-- pids |
|
||
|
189 | - | |-- sessions |
|
||
|
190 | - | `-- sockets |
|
||
|
191 | - `-- vendor |
|
||
|
192 | - |-- assets |
|
||
|
193 | - `-- stylesheets |
|
||
|
194 | - `-- plugins |
|
||
|
195 |
|
103 | ||
|
196 | - app |
|
104 | + Then, take note of the path after "Command". For this guide, it is /home/cafe/.rvm/gems/ruby-2.3.7/wrappers/ruby |
|
197 | - Holds all the code that's specific to this particular application. |
|
||
|
198 |
|
105 | ||
|
199 | - app/assets |
|
106 | + Assuming that cafe-grader is installed at /home/cafe/cafe_grader, we will edit the site config file of the apache as follow. |
|
200 | - Contains subdirectories for images, stylesheets, and JavaScript files. |
|
107 | + |
|
|
108 | + <VirtualHost *:80> | ||
|
|
109 | + #ServerName www.example.com | ||
|
201 |
|
110 | ||
|
202 | - app/controllers |
|
111 | + ServerAdmin webmaster@localhost |
|
203 | - Holds controllers that should be named like weblogs_controller.rb for |
|
112 | + # dont forget to change the document root |
|
204 | - automated URL mapping. All controllers should descend from |
|
113 | + DocumentRoot /home/cafe/cafe_grader/web/public |
|
205 | - ApplicationController which itself descends from ActionController::Base. |
|
114 | + |
|
206 | - |
|
115 | + ErrorLog ${APACHE_LOG_DIR}/error.log |
|
207 | - app/models |
|
116 | + CustomLog ${APACHE_LOG_DIR}/access.log combined |
|
208 | - Holds models that should be named like post.rb. Models descend from |
|
||
|
209 | - ActiveRecord::Base by default. |
|
||
|
210 | - |
|
||
|
211 | - app/views |
|
||
|
212 | - Holds the template files for the view that should be named like |
|
||
|
213 | - weblogs/index.html.erb for the WeblogsController#index action. All views use |
|
||
|
214 | - eRuby syntax by default. |
|
||
|
215 |
|
117 | ||
|
216 | - app/views/layouts |
|
118 | + # add Passenger |
|
217 | - Holds the template files for layouts to be used with views. This models the |
|
119 | + PassengerRuby /home/cafe/.rvm/gems/ruby-2.3.7/wrappers/ruby |
|
218 | - common header/footer method of wrapping views. In your views, define a layout |
|
||
|
219 | - using the <tt>layout :default</tt> and create a file named default.html.erb. |
|
||
|
220 | - Inside default.html.erb, call <% yield %> to render the view using this |
|
||
|
221 | - layout. |
|
||
|
222 | - |
|
||
|
223 | - app/helpers |
|
||
|
224 | - Holds view helpers that should be named like weblogs_helper.rb. These are |
|
||
|
225 | - generated for you automatically when using generators for controllers. |
|
||
|
226 | - Helpers can be used to wrap functionality for your views into methods. |
|
||
|
227 | - |
|
||
|
228 | - config |
|
||
|
229 | - Configuration files for the Rails environment, the routing map, the database, |
|
||
|
230 | - and other dependencies. |
|
||
|
231 |
|
120 | ||
|
232 | - db |
|
121 | + # our cafe-grader app |
|
233 | - Contains the database schema in schema.rb. db/migrate contains all the |
|
122 | + <Directory /home/cafe/cafe_grader/web/public> |
|
234 | - sequence of Migrations for your schema. |
|
123 | + Allow from all |
|
235 | - |
|
124 | + Options -MultiViews |
|
236 | - doc |
|
125 | + Require all granted |
|
237 | - This directory is where your application documentation will be stored when |
|
126 | + </Directory> |
|
238 | - generated using <tt>rake doc:app</tt> |
|
127 | + </VirtualHost> |
|
239 | - |
|
||
|
240 | - lib |
|
||
|
241 | - Application specific libraries. Basically, any kind of custom code that |
|
||
|
242 | - doesn't belong under controllers, models, or helpers. This directory is in |
|
||
|
243 | - the load path. |
|
||
|
244 |
|
128 | ||
|
245 | - public |
|
||
|
246 | - The directory available for the web server. Also contains the dispatchers and the |
|
||
|
247 | - default HTML files. This should be set as the DOCUMENT_ROOT of your web |
|
||
|
248 | - server. |
|
||
|
249 | - |
|
||
|
250 | - script |
|
||
|
251 | - Helper scripts for automation and generation. |
|
||
|
252 |
|
129 | ||
|
253 | - test |
|
130 | + Be noted that we make 3 modifications: 1) change DocumentRoot, 2) add PassengerRuby option and add 3) Directory directive |
|
254 | - Unit and functional tests along with fixtures. When using the rails generate |
|
131 | + As the last step, we restart apache again and the site is ready to be used. |
|
255 | - command, template test files will be generated for you and placed in this |
|
||
|
256 | - directory. |
|
||
|
257 |
|
132 | ||
|
258 | - vendor |
|
133 | + cafe@grader:~$ sudo apache2ctl restart |
|
259 | - External libraries that the application depends on. Also includes the plugins |
|
134 | + |
|
260 | - subdirectory. If the app has frozen rails, those gems also go here, under |
|
||
|
261 | - vendor/rails/. This directory is in the load path. |
|
You need to be logged in to leave comments.
Login now