Go up to the main SLP documents page (md)
In this homework, you will create MVC systems using different frameworks: Ruby on Rails, and Django.
All of these systems will use the SAME database, and one of the important aspects of this homework is to make sure that they all use different tables in that database.
We are providing you a server to use for this homework. In an effort not to broadcast the name of the course server – and to allow it to be changed without having to update everything herein – it is just called “the server” throughout these documents. The server name and the login credentials are in the Post’Em tool in Collab. It will likely be far easier to develop this on your own machine (presumably the VirtualBox image), and then move it to the server when it is ready.
The easiest way is to download the Virtual Box image from Collab (in Resources). You can read the directions on the VirtualBox introduction (md) page for how to set it up. If you want to configure your own machine, you can view the steps taken to create the image on the VirtualBox image details (md) page.
The provided course server has a valid (and properly signed) SSL certificate, so you can view any of the links through http:// or https://.
First, you will need to become familiar with MySQL, if you are not already. Depending on your familiarity level, you may want to go through the MySQL Introduction (md) page. Both new and advanced users will want to refer to the MySQL Reference (md) page throughout this course.
Note that the server has phpMyAdmin installed at
Due to vulnerabilites in phpMyAdmin, it is
disabled for the time being on the course server. You will have to use
the command line interface for now.https://server/phpmyadmin/ (where “server” is the server
used for the course).
You will need to create a series of tables as part of this process -
keep track of the MySQL commands that you issue, as you will have to
repeat them on the server. Alternatively, you can dump your entire MySQL
database via mysqldump -u user -p mst3k > db.sql. Here,
user is whatever user can access the directory (perhaps
“student”, perhaps your UVa userid). Or you can do it via phpMyAdmin.
Either way, you should have a file that contains all the SQL commands to
create the necessary database tables - we’ll need that shortly.
You will need to create a database on your local machine. The easiest way is to have it be the same username and password as is on the server, so that you can use the same database configuration files.
mysql -u root -p, and enter the
root password (likely ‘password’)create database mst3k;grant all on mst3k.* to 'mst3k' identified by 'password';
.* after the database name (the first
‘mst3k’)@'localhost' after the
userid:grant all on mst3k.* to 'mst3k'@'localhost' identified by 'password';At this point, you have the same databse config on both your local machine as on the server.
If you are working at home, you will likely want to upload the files to the server. To do so, you can try this command (presumably from your ~/html directory):
rsync -a --del --progress foobar/ mst3k@server:~/html/foobar/
Note that this command is very particular about the parameters! If
you were to specify foobar instead of foobar/
(this is after the --progress parameter), then it will do
something very different.
This command will upload all the changed files to the
server. The -a flag causes it to upload the entire
directory structure. The --del flag tells rsync to
delete files on the remote server that have been deleted on the
local copy. And the --progress flag tells it to display the
progress.
One of the issues is that this will overwrite files that have been modified, and this may not always be what you want. For example, you may have differet files that specify the database user name and password. So if you were to log into the server, and manually change the files, then it would overwrite them with the next rsync call.
To prevent this, you can use the --exclude flag, which
causes it to not bother uploading certain files:
rsync -a --del --progress --exclude '.htaccess' foobar/ mst3k@server:~/html/foobar/
This will cause rsync to not upload any files called
.htaccess. Note that you should upload everything
the first time (i.e., using the first rsync command given), then log
into the server and manually change the .htaccess files. You should then
call the second rsync command from then on.
Which files you exclude will depend on which ones differ between your development machine and the server. If you use the same database config, as described above, then you can use the same database credential files as well.
If you did a mysqldump on your local machine to a file called
db.sql, you can load that data into the database on the
server by entering:
cat db.sql | mysql -u mst3k -p mst3k
Replace mst3k with your userid; it will prompt you for your password. This command must be run on the server. To log into the server, enter:
ssh mst3k@server
Where ‘mst3k’ is your userid, and ‘server’ is the full name of the server. Once you enter your password, you will be logged into a command prompt on the server.
Ruby is the programming language, and Rails is the framework (library). When used together it is called “Ruby on Rails”. While it is possible to use Ruby without Rails (or Rails without Ruby), that is rarely done.
First, read through the Ruby
on Rails getting started (md) page. The assumption is that
you will test it locally via rails server, and the deploy
it on the course server via the directions on that page. If you want to
try your hand configuring your own Rails server, you can look
at the Ruby on Rails deployment
(md) page – but be warned, it’s a
real pain in the rear to configure a Rails server.
We are using Ruby version 2.4.1 and Rails version 5.1.3 for this assigment. If you have a more recent patch level (the last of the three digits of the version number), that’s fine. But you can’t have a different major version (the first of those three numbers) or a different minor version (the middle of those three numbers).
On the course server, your app must be called
railshw, and it must be in your home directory. In
other words, there must be a /home/slp/mst3k/railshw/public
directory on the course server, as this is what the webserver will be
looking for. If you change anything in that path, the web server will
never find your app. You can then view your app at
http://server/rails/mst3k, where “server” is the course
server.
This part of the assignment is to complete the blog tutorial here. Recall that we are using Rails 5.1.3.
rails new railshw -d mysql in your home directory (this is
in section 3.2 of that web page; be sure to name it railshw
so the URL is correct)Lastly, to see how to upload your Rails app to the server, see the “Uploading to the server” section of the Ruby on Rails getting started (md) page.
First, read through the Django
getting started (md) page.
The assumption is that you will test it locally via
python manage.py runserver, and the deploy it on the course
server via the directions on that page. If you want to try your hand
configuring your own Apache server to run Django, you can look
at the Django deployment (md) page – but be warned, it’s a real
pain in the rear to configure a Django server (although not as bad as
Rails).
Unlike Ruby on Rails, you can name the Django project anything you
want, and put it in any directory that you want. Although naming it
djangohw and putting it in our home directory on the course
server would not be bad ideas.
The task for the Django part of this homework is to go through all seven parts of the introductory tutorial, found here (the “Tutorial” line in the “First steps” section). Make sure you are going through the 1.11 version!
A few notes on that tutorial (these were notes from a previous version of the tutorial, so take these with a grain of salt):
from django.utils import timezone and
import datetime); this is described in more detail herefrom django.utils import timezone at the
top of that filetest_detail_view_with_a_future_poll()) only succeeds if a
future poll returns a 404 page, which is what the original
results() view did. However, when the view was switched
over to Django’s generic views (the bottom of the tutorial
page 4), that is no longer the default behavior. Thus, that test can
be removed. This will make much more sense once you have read through
the end of the testing section in the tutorial.When you have updated your Django project, remember to touch the wsgi.py file to make the web server reload your project; see the Django getting started (md) page for details.
It is much more difficult to rename your tables in Django – you have
to do it individually for each table. But if the Ruby on Rails tables
all start with ruby_, then you can leave the Django talbes
to have the default name. However, the names used in the Django tutorial
should not conflict with the other tables therein.
For the submission, we are not going to be configuring it on the web
server, for reasons that will be explained elsewhere. Instead, we will
look at your project files on the server, and run it through
python manage.py runserver. Thus, you MUST take the
following steps:
None! We have access to your files on the course server, and we can view your projects at the following URLs. It must be at these EXACT URLs, or else your assignment will not be graded.
http://server/rails/mst3khttp://server/django/mst3k
For any sites that have user authentication, you MUST allow user
kermit with password frog to log in and see
any and all features. If frog doesn’t work (it’s too
short), try frog1234. (You do this via
python manage.py createsuperuser). For the Rails app, we
will also try authenticating dhh and secret,
which is what the tutorial tells you to use (so either one is fine for
the Rails app).
Whether your program is late or not will be determined by the timestamp on the files in your home directory on the course server.