root / README.develop @ 5509b599
History | View | Annotate | Download (10.5 kB)
1 | bbd4f788 | Georgios Gousios | DEVELOP.txt - Information on how to setup a development environment. |
---|---|---|---|
2 | bbd4f788 | Georgios Gousios | |
3 | bbd4f788 | Georgios Gousios | Dependencies |
4 | bbd4f788 | Georgios Gousios | ------------ |
5 | bbd4f788 | Georgios Gousios | |
6 | 602d6541 | Vangelis Koukis | Synnefo is written in Python 2.6 and depends on the following Python modules |
7 | 602d6541 | Vangelis Koukis | [package versions confirmed to be compatible are in braces] |
8 | bbd4f788 | Georgios Gousios | |
9 | 602d6541 | Vangelis Koukis | - django 1.2 [Django==1.2.4] |
10 | 602d6541 | Vangelis Koukis | - simplejson [simplejson==2.1.3] |
11 | 602d6541 | Vangelis Koukis | - pycurl [pycurl==7.19.0] |
12 | 602d6541 | Vangelis Koukis | - python-dateutil [python-dateutil==1.4.1] |
13 | 6fc64f55 | Georgios Gousios | WARNING: version python-dateutil==2.0 downloaded by pip known *not* to work |
14 | 6fc64f55 | Georgios Gousios | with Python 2.6 |
15 | 9ad94f0a | Vassilios Karakoidas | - south [south==0.7.1] |
16 | ba238ebe | Georgios Gousios | - ampqlib [ampqlib==0.6.1] |
17 | bbd4f788 | Georgios Gousios | |
18 | bbd4f788 | Georgios Gousios | also, depending on the database engine of choice, on one of the following: |
19 | 602d6541 | Vangelis Koukis | - MySQL-python [MySQL-python==1.2.3] |
20 | 602d6541 | Vangelis Koukis | - psycopg2 [psycopg2==2.4] |
21 | f5e590e4 | Georgios Gousios | |
22 | ba238ebe | Georgios Gousios | to run the user interface tests, selenium must be installed |
23 | ba238ebe | Georgios Gousios | - selenium [?] |
24 | f5e590e4 | Georgios Gousios | |
25 | bbd4f788 | Georgios Gousios | Preparing the development environment |
26 | bbd4f788 | Georgios Gousios | ------------------------------------- |
27 | bbd4f788 | Georgios Gousios | |
28 | bbd4f788 | Georgios Gousios | 1. Prepare the system |
29 | bbd4f788 | Georgios Gousios | The easiest method is to setup a working environment through virtualenv. |
30 | bbd4f788 | Georgios Gousios | Alternatively, you can use your system's package manager to install |
31 | bbd4f788 | Georgios Gousios | the dependencies (e.g. Macports has them all). |
32 | bbd4f788 | Georgios Gousios | |
33 | 6fc64f55 | Georgios Gousios | *On Snow Leopard and linux (64-bit), you have to set the following environment |
34 | 6fc64f55 | Georgios Gousios | variable for pip to compile the dependencies correctly. |
35 | bbd4f788 | Georgios Gousios | |
36 | bbd4f788 | Georgios Gousios | $export ARCHFLAGS="-arch x86_64" |
37 | bbd4f788 | Georgios Gousios | |
38 | 602d6541 | Vangelis Koukis | *On Ubuntu, a few more packages must be installed before installing the |
39 | bbd4f788 | Georgios Gousios | prerequisite Python libraries |
40 | bbd4f788 | Georgios Gousios | |
41 | bbd4f788 | Georgios Gousios | $sudo aptitude install libcurl3-gnutls libcurl3-gnutls-dev uuid-dev |
42 | bbd4f788 | Georgios Gousios | |
43 | bbd4f788 | Georgios Gousios | 2. Checkout the code and install the Python prerequisites. This assumes |
44 | bbd4f788 | Georgios Gousios | that python is already installed on the host. |
45 | bbd4f788 | Georgios Gousios | |
46 | bbd4f788 | Georgios Gousios | $ sudo easy_install virtualenv |
47 | bbd4f788 | Georgios Gousios | $ git clone https://user@code.grnet.gr/git/synnefo synnefo |
48 | bbd4f788 | Georgios Gousios | $ virtualenv --python=python2.6 synnefo --no-site-packages |
49 | bbd4f788 | Georgios Gousios | ... |
50 | bbd4f788 | Georgios Gousios | $ cd synnefo |
51 | 602d6541 | Vangelis Koukis | $ ./bin/pip install <list_of_prerequisites> |
52 | bbd4f788 | Georgios Gousios | |
53 | 83d51c7b | Georgios Gousios | 3. At this point you should have all required dependencies installed. Now you |
54 | bbd4f788 | Georgios Gousios | have to select a database engine. The choices are: postgres, mysql and sqlite. |
55 | bbd4f788 | Georgios Gousios | |
56 | bbd4f788 | Georgios Gousios | -SQLite |
57 | bbd4f788 | Georgios Gousios | The python sqlite driver is available by default with Python so no additional |
58 | bbd4f788 | Georgios Gousios | configuration is required. Also, most self-respecting systems have the sqlite |
59 | bbd4f788 | Georgios Gousios | library installed by default. |
60 | bbd4f788 | Georgios Gousios | |
61 | bbd4f788 | Georgios Gousios | -MySQL |
62 | bbd4f788 | Georgios Gousios | MySQL must be installed first |
63 | bbd4f788 | Georgios Gousios | |
64 | bbd4f788 | Georgios Gousios | *Ubuntu - Debian |
65 | bbd4f788 | Georgios Gousios | $sudo apt-get install libmysqlclient-dev |
66 | bbd4f788 | Georgios Gousios | |
67 | bbd4f788 | Georgios Gousios | *MacPorts |
68 | bbd4f788 | Georgios Gousios | $sudo port install mysql5 |
69 | bbd4f788 | Georgios Gousios | |
70 | bbd4f788 | Georgios Gousios | Install the MySQL python library |
71 | bbd4f788 | Georgios Gousios | |
72 | bbd4f788 | Georgios Gousios | $ bin/pip install MySQL-python |
73 | bbd4f788 | Georgios Gousios | |
74 | bbd4f788 | Georgios Gousios | Note: On MacOSX with Mysql install from MacPorts the above command will fail |
75 | bbd4f788 | Georgios Gousios | complaining that it cannot find the mysql_config command. Do the following and |
76 | bbd4f788 | Georgios Gousios | restart the installation |
77 | bbd4f788 | Georgios Gousios | |
78 | bbd4f788 | Georgios Gousios | $ echo "mysql_config = /opt/local/bin/mysql_config5" >> ./build/MySQL-python/site.cfg |
79 | bbd4f788 | Georgios Gousios | |
80 | bbd4f788 | Georgios Gousios | Configure a MySQL db/account for synnefo |
81 | bbd4f788 | Georgios Gousios | |
82 | bbd4f788 | Georgios Gousios | $ mysql -u root -p |
83 | bbd4f788 | Georgios Gousios | |
84 | bbd4f788 | Georgios Gousios | mysql> create database synnefo; |
85 | bbd4f788 | Georgios Gousios | mysql> show databases; |
86 | bbd4f788 | Georgios Gousios | mysql> GRANT ALL on synnefo.* TO username IDENTIFIED BY 'password'; |
87 | bbd4f788 | Georgios Gousios | |
88 | bbd4f788 | Georgios Gousios | -Postgres |
89 | bbd4f788 | Georgios Gousios | |
90 | bbd4f788 | Georgios Gousios | #Ubuntu - Debian |
91 | bbd4f788 | Georgios Gousios | $ sudo apt-get install postgresql-8.4 libpq-dev |
92 | bbd4f788 | Georgios Gousios | |
93 | bbd4f788 | Georgios Gousios | #MacPorts |
94 | bbd4f788 | Georgios Gousios | $ sudo port install postgresql84 |
95 | bbd4f788 | Georgios Gousios | |
96 | bbd4f788 | Georgios Gousios | Install the postgres Python library |
97 | bbd4f788 | Georgios Gousios | |
98 | bbd4f788 | Georgios Gousios | $ bin/pip install psycopg2 |
99 | bbd4f788 | Georgios Gousios | |
100 | bbd4f788 | Georgios Gousios | Configure a postgres db/account for synnefo |
101 | 7fb0fc9f | Vangelis Koukis | Become the postgres user, connect to PostgreSQL: |
102 | 7fb0fc9f | Vangelis Koukis | $ sudo su - postgres |
103 | 7fb0fc9f | Vangelis Koukis | $ psql |
104 | 7fb0fc9f | Vangelis Koukis | |
105 | 7fb0fc9f | Vangelis Koukis | Run the following commands: |
106 | 7fb0fc9f | Vangelis Koukis | DROP DATABASE synnefo; |
107 | 7fb0fc9f | Vangelis Koukis | DROP USER username; |
108 | 7fb0fc9f | Vangelis Koukis | CREATE USER username WITH PASSWORD 'password'; |
109 | 7fb0fc9f | Vangelis Koukis | CREATE DATABASE synnefo; |
110 | 7fb0fc9f | Vangelis Koukis | GRANT ALL PRIVILEGES ON DATABASE synnefo TO username; |
111 | 7fb0fc9f | Vangelis Koukis | ALTER DATABASE synnefo OWNER TO username; |
112 | 7fb0fc9f | Vangelis Koukis | ALTER USER username CREATEDB; |
113 | 7fb0fc9f | Vangelis Koukis | |
114 | 7fb0fc9f | Vangelis Koukis | The last line enables the newly created user to create own databases. This is |
115 | 7fb0fc9f | Vangelis Koukis | needed for Django to create and drop the test_synnefo database for unit |
116 | 7fb0fc9f | Vangelis Koukis | testing. |
117 | bbd4f788 | Georgios Gousios | |
118 | 83d51c7b | Georgios Gousios | 4. At this point you should have a working DB. Now configure Django to access it: |
119 | bbd4f788 | Georgios Gousios | Copy the default configuration file |
120 | bbd4f788 | Georgios Gousios | |
121 | bbd4f788 | Georgios Gousios | $ cp settings.py.dist settings.py |
122 | bbd4f788 | Georgios Gousios | |
123 | 83d51c7b | Georgios Gousios | and then copy/edit according to the database used: |
124 | bbd4f788 | Georgios Gousios | |
125 | bbd4f788 | Georgios Gousios | -SQLite |
126 | bbd4f788 | Georgios Gousios | |
127 | bbd4f788 | Georgios Gousios | PROJECT_PATH = os.path.dirname(os.path.abspath(__file__)) + '/' |
128 | bbd4f788 | Georgios Gousios | |
129 | bbd4f788 | Georgios Gousios | DATABASES = { |
130 | bbd4f788 | Georgios Gousios | 'default': { |
131 | 83d51c7b | Georgios Gousios | 'ENGINE': 'django.db.backends.sqlite3', |
132 | 83d51c7b | Georgios Gousios | 'NAME': PROJECT_PATH + 'synnefo.db' #WARN: This must be an absolute path |
133 | bbd4f788 | Georgios Gousios | } |
134 | bbd4f788 | Georgios Gousios | } |
135 | bbd4f788 | Georgios Gousios | |
136 | bbd4f788 | Georgios Gousios | -MySQL |
137 | bbd4f788 | Georgios Gousios | DATABASES = { |
138 | bbd4f788 | Georgios Gousios | 'default': { |
139 | 83d51c7b | Georgios Gousios | 'ENGINE': 'django.db.backends.mysql', |
140 | bbd4f788 | Georgios Gousios | 'NAME': 'synnefo', |
141 | b6ad19f8 | Vassilios Karakoidas | 'USER': 'USERNAME', |
142 | bbd4f788 | Georgios Gousios | 'PASSWORD': 'PASSWORD', |
143 | bbd4f788 | Georgios Gousios | 'HOST': 'HOST', |
144 | bbd4f788 | Georgios Gousios | 'PORT': 'PORT', |
145 | bbd4f788 | Georgios Gousios | 'OPTIONS': { |
146 | bbd4f788 | Georgios Gousios | 'init_command': 'SET storage_engine=INNODB', |
147 | bbd4f788 | Georgios Gousios | } |
148 | bbd4f788 | Georgios Gousios | } |
149 | bbd4f788 | Georgios Gousios | } |
150 | bbd4f788 | Georgios Gousios | |
151 | bbd4f788 | Georgios Gousios | -Postgres |
152 | bbd4f788 | Georgios Gousios | |
153 | bbd4f788 | Georgios Gousios | DATABASES = { |
154 | bbd4f788 | Georgios Gousios | 'default': { |
155 | 83d51c7b | Georgios Gousios | 'ENGINE': 'django.db.backends.postgresql_psycopg2', |
156 | bbd4f788 | Georgios Gousios | 'NAME': 'DATABASE', |
157 | bbd4f788 | Georgios Gousios | 'USER': 'USERNAME', |
158 | bbd4f788 | Georgios Gousios | 'PASSWORD': 'PASSWORD', |
159 | bbd4f788 | Georgios Gousios | 'HOST': 'HOST', |
160 | bbd4f788 | Georgios Gousios | 'PORT': 'PORT', |
161 | bbd4f788 | Georgios Gousios | } |
162 | bbd4f788 | Georgios Gousios | } |
163 | bbd4f788 | Georgios Gousios | |
164 | 83d51c7b | Georgios Gousios | 5. Try it out. The following command will attempt to connect to the DB and |
165 | bbd4f788 | Georgios Gousios | print out DDL statements. It should not fail. |
166 | bbd4f788 | Georgios Gousios | |
167 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py sql db |
168 | bbd4f788 | Georgios Gousios | |
169 | 83d51c7b | Georgios Gousios | 6. Create the DB and (optionally) load test data |
170 | bbd4f788 | Georgios Gousios | |
171 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py syncdb |
172 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py loaddata db/fixtures/flavors.json |
173 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py loaddata db/fixtures/images.json |
174 | f5e590e4 | Georgios Gousios | |
175 | 4cf8adf8 | Vangelis Koukis | The following fixtures can be loaded optionally depending on |
176 | f5e590e4 | Georgios Gousios | testing requirements: |
177 | f5e590e4 | Georgios Gousios | |
178 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py loaddata db/fixtures/vms.json |
179 | f5e590e4 | Georgios Gousios | $ ./bin/python manage.py loaddata db/fixtures/disks.json |
180 | 83d51c7b | Georgios Gousios | |
181 | 83d51c7b | Georgios Gousios | 7. Set the BACKEND_PREFIX_ID variable to some unique prefix, e.g. your commit |
182 | 24435a56 | Georgios Gousios | username in settings.py. Several functional conventions within the system |
183 | 24435a56 | Georgios Gousios | require this variable to include a dash at its end (e.g. snf-) |
184 | 83d51c7b | Georgios Gousios | |
185 | 7ca9e930 | Vangelis Koukis | 8. Fix the AMQP-specific settings based on the selected BACKEND_PREFIX_ID. |
186 | 7ca9e930 | Vangelis Koukis | The fix_amqp_settings() function is called once at the end of |
187 | 7ca9e930 | Vangelis Koukis | settings.py.dist, you must call it again if you change BACKEND_PREFIX_ID |
188 | 7ca9e930 | Vangelis Koukis | at some later point. |
189 | 24435a56 | Georgios Gousios | |
190 | 24435a56 | Georgios Gousios | 9. Start the system |
191 | 24435a56 | Georgios Gousios | $ ./bin/python logic/dispatcher.py # DB synch daemon |
192 | 4cf8adf8 | Vangelis Koukis | $ ./bin/python manage.py runserver # Django |
193 | f5e590e4 | Georgios Gousios | |
194 | 24435a56 | Georgios Gousios | 10. (Hopefully) Done |
195 | bbd4f788 | Georgios Gousios | |
196 | 6fc64f55 | Georgios Gousios | South Database Migrations |
197 | 9ad94f0a | Vassilios Karakoidas | ------------------------ |
198 | 9ad94f0a | Vassilios Karakoidas | |
199 | 6d5f3dd2 | Vassilios Karakoidas | *Initial Migration |
200 | 6d5f3dd2 | Vassilios Karakoidas | |
201 | 9ad94f0a | Vassilios Karakoidas | First, remember to add the south app to settings.py (it is already included in the |
202 | 9ad94f0a | Vassilios Karakoidas | settings.py.dist). |
203 | 9ad94f0a | Vassilios Karakoidas | |
204 | 55175e78 | Vassilios Karakoidas | To initialise south migrations in your database the following commands must be executed: |
205 | 55175e78 | Vassilios Karakoidas | |
206 | 55175e78 | Vassilios Karakoidas | $ ./bin/python manage.py syncdb # Create / update the database with the south tables |
207 | 55175e78 | Vassilios Karakoidas | $ ./bin/python manage.py migrate db # Perform migration in the database |
208 | 55175e78 | Vassilios Karakoidas | |
209 | 55175e78 | Vassilios Karakoidas | Note that syncdb will create the latest models that exist in the db app, so some migrations may fail. |
210 | 55175e78 | Vassilios Karakoidas | If you are sure a migration has already taken place you must use the "--fake" option, to apply it. |
211 | 55175e78 | Vassilios Karakoidas | |
212 | 55175e78 | Vassilios Karakoidas | For example: |
213 | 55175e78 | Vassilios Karakoidas | |
214 | 55175e78 | Vassilios Karakoidas | $ ./bin/python manage.py migrate db 0001 --fake |
215 | 9ad94f0a | Vassilios Karakoidas | |
216 | 55175e78 | Vassilios Karakoidas | To be sure that all migrations are applied type: |
217 | 9ad94f0a | Vassilios Karakoidas | |
218 | 55175e78 | Vassilios Karakoidas | $ ./bin/python manage.py migrate db --list |
219 | 55175e78 | Vassilios Karakoidas | |
220 | 55175e78 | Vassilios Karakoidas | All starred migrations are applied. |
221 | 55175e78 | Vassilios Karakoidas | |
222 | 55175e78 | Vassilios Karakoidas | Remember, the migration is performed mainly for the data, not for the database schema. If you do not want to migrate the |
223 | 55175e78 | Vassilios Karakoidas | data, a syncdb and fake migrations for all the migration versions will suffice. |
224 | 55175e78 | Vassilios Karakoidas | |
225 | 55175e78 | Vassilios Karakoidas | *Schema migrations: |
226 | 55175e78 | Vassilios Karakoidas | |
227 | 55175e78 | Vassilios Karakoidas | Do not use the syncdb management command. It can only be used |
228 | 55175e78 | Vassilios Karakoidas | the first time and/or if you drop the database and must recreate it from scratch. |
229 | 55175e78 | Vassilios Karakoidas | See "Initial Migration" section. |
230 | 9ad94f0a | Vassilios Karakoidas | |
231 | 9ad94f0a | Vassilios Karakoidas | Each time you make changes to the database and data migration is not required (WARNING: always |
232 | 9ad94f0a | Vassilios Karakoidas | perform this with extreme care): |
233 | 9ad94f0a | Vassilios Karakoidas | |
234 | 9ad94f0a | Vassilios Karakoidas | $ ./bin/python schemamigration db --auto |
235 | 9ad94f0a | Vassilios Karakoidas | |
236 | 9ad94f0a | Vassilios Karakoidas | The above will create the migration script. Now this must be applied to the live database. |
237 | 9ad94f0a | Vassilios Karakoidas | |
238 | 9ad94f0a | Vassilios Karakoidas | $ ./bin/python migrate db |
239 | 9ad94f0a | Vassilios Karakoidas | |
240 | 9ad94f0a | Vassilios Karakoidas | Consider this example (adding a field to the SynnefoUser model): |
241 | 9ad94f0a | Vassilios Karakoidas | |
242 | 9ad94f0a | Vassilios Karakoidas | bkarak@nefarian:~/devel/synnefo$ ./bin/python manage.py schemamigration db --auto |
243 | 9ad94f0a | Vassilios Karakoidas | + Added field new_south_test_field on db.SynnefoUser |
244 | 6fc64f55 | Georgios Gousios | Created 0002_auto__add_field_synnefouser_new_south_test_field.py. |
245 | 6fc64f55 | Georgios Gousios | |
246 | 6fc64f55 | Georgios Gousios | You can now apply this migration with: ./manage.py migrate db |
247 | 6fc64f55 | Georgios Gousios | |
248 | d79d8208 | Vassilios Karakoidas | $ ./manage.py migrate db |
249 | 9ad94f0a | Vassilios Karakoidas | Running migrations for db: |
250 | 9ad94f0a | Vassilios Karakoidas | - Migrating forwards to 0002_auto__add_field_synnefouser_new_south_test_field. |
251 | 9ad94f0a | Vassilios Karakoidas | > db:0002_auto__add_field_synnefouser_new_south_test_field |
252 | 9ad94f0a | Vassilios Karakoidas | - Loading initial data for db. |
253 | 9ad94f0a | Vassilios Karakoidas | Installing json fixture 'initial_data' from '/home/bkarak/devel/synnefo/../synnefo/db/fixtures'. |
254 | 9ad94f0a | Vassilios Karakoidas | Installed 1 object(s) from 1 fixture(s) |
255 | 9ad94f0a | Vassilios Karakoidas | |
256 | 9ad94f0a | Vassilios Karakoidas | South needs some extra definitions to the model to preserve and migrate the existing data, for example, if we add a field |
257 | 6fc64f55 | Georgios Gousios | in a model, we should declare its default value. If not, South will propably fail, after indicating the error. |
258 | 6fc64f55 | Georgios Gousios | |
259 | d79d8208 | Vassilios Karakoidas | $ ./bin/python manage.py schemamigration db --auto |
260 | d79d8208 | Vassilios Karakoidas | ? The field 'SynnefoUser.new_south_field_2' does not have a default specified, yet is NOT NULL. |
261 | d79d8208 | Vassilios Karakoidas | ? Since you are adding or removing this field, you MUST specify a default |
262 | d79d8208 | Vassilios Karakoidas | ? value to use for existing rows. Would you like to: |
263 | d79d8208 | Vassilios Karakoidas | ? 1. Quit now, and add a default to the field in models.py |
264 | d79d8208 | Vassilios Karakoidas | ? 2. Specify a one-off value to use for existing columns now |
265 | d79d8208 | Vassilios Karakoidas | ? Please select a choice: 1 |
266 | 6fc64f55 | Georgios Gousios | |
267 | 6fc64f55 | Georgios Gousios | *Data migrations: |
268 | 9ad94f0a | Vassilios Karakoidas | |
269 | 9ad94f0a | Vassilios Karakoidas | If we need to do data migration as well, for example rename a field, we use tha 'datamigration' management command. |
270 | 9ad94f0a | Vassilios Karakoidas | |
271 | 2e19b161 | Vassilios Karakoidas | In contrast with schemamigration, to perform complex data migration, we must write the script manually. The process is |
272 | 2e19b161 | Vassilios Karakoidas | the following: |
273 | 2e19b161 | Vassilios Karakoidas | |
274 | 2e19b161 | Vassilios Karakoidas | 1. Introduce the changes in the code and fixtures (initial data). |
275 | 2e19b161 | Vassilios Karakoidas | 2. Execute: |
276 | 2e19b161 | Vassilios Karakoidas | |
277 | 2e19b161 | Vassilios Karakoidas | $ ./bin/python manage.py datamigration <migration_name_here> |
278 | 2e19b161 | Vassilios Karakoidas | |
279 | 2e19b161 | Vassilios Karakoidas | For example: |
280 | 2e19b161 | Vassilios Karakoidas | |
281 | 2e19b161 | Vassilios Karakoidas | $ ./bin/python manage.py datamigration db rename_credit_wallet |
282 | 2e19b161 | Vassilios Karakoidas | Created 0003_rename_credit_wallet.py. |
283 | 2e19b161 | Vassilios Karakoidas | |
284 | 2e19b161 | Vassilios Karakoidas | 3. We edit the generated script. It contains two methods: forwards and backwards. |
285 | 2e19b161 | Vassilios Karakoidas | |
286 | 2e19b161 | Vassilios Karakoidas | For database operations (column additions, alter tables etc) we use the South database API |
287 | 2e19b161 | Vassilios Karakoidas | (http://south.aeracode.org/docs/databaseapi.html). |
288 | 2e19b161 | Vassilios Karakoidas | |
289 | d79d8208 | Vassilios Karakoidas | To access the data, we use the database reference (orm) provided as parameter in forwards, backwards method declarations |
290 | d79d8208 | Vassilios Karakoidas | in the migration script. For example: |
291 | 2e19b161 | Vassilios Karakoidas | |
292 | 2e19b161 | Vassilios Karakoidas | class Migration(DataMigration): |
293 | 2e19b161 | Vassilios Karakoidas | |
294 | 2e19b161 | Vassilios Karakoidas | def forwards(self, orm): |
295 | 2e19b161 | Vassilios Karakoidas | orm.SynnefoUser.objects.all() |
296 | 2e19b161 | Vassilios Karakoidas | |
297 | 2e19b161 | Vassilios Karakoidas | 4. To migrate the database to the latest version, we execute: |
298 | 2e19b161 | Vassilios Karakoidas | |
299 | 2e19b161 | Vassilios Karakoidas | ./manage.py migrate db |
300 | 2e19b161 | Vassilios Karakoidas | |
301 | 2e19b161 | Vassilios Karakoidas | To see which migrations are applied: |
302 | 2e19b161 | Vassilios Karakoidas | |
303 | 2e19b161 | Vassilios Karakoidas | $ ./bin/python manage.py migrate db --list |
304 | 2e19b161 | Vassilios Karakoidas | |
305 | 2e19b161 | Vassilios Karakoidas | db |
306 | 2e19b161 | Vassilios Karakoidas | (*) 0001_initial |
307 | 2e19b161 | Vassilios Karakoidas | (*) 0002_auto__add_field_synnefouser_new_south_test_field |
308 | 2e19b161 | Vassilios Karakoidas | (*) 0003_rename_credit_wallet |
309 | 2e19b161 | Vassilios Karakoidas | |
310 | 2e19b161 | Vassilios Karakoidas | More information and more thorough examples can be found in the South web site. |
311 | 2e19b161 | Vassilios Karakoidas | |
312 | 2e19b161 | Vassilios Karakoidas | http://south.aeracode.org/ |
313 | 2e19b161 | Vassilios Karakoidas | |
314 | bbd4f788 | Georgios Gousios | UI Testing |
315 | bbd4f788 | Georgios Gousios | ---------- |
316 | 83d51c7b | Georgios Gousios | The functional ui tests require the Selenium server and the synnefo app to |
317 | 83d51c7b | Georgios Gousios | be running. |
318 | bbd4f788 | Georgios Gousios | |
319 | bbd4f788 | Georgios Gousios | $ wget http://selenium.googlecode.com/files/selenium-server-standalone-2.0b2.jar |
320 | bbd4f788 | Georgios Gousios | $ java -jar selenium-server-standalone-2.0b2.jar & |
321 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py runserver & |
322 | bbd4f788 | Georgios Gousios | $ ./bin/python manage.py test ui |
323 | bbd4f788 | Georgios Gousios | |
324 | bbd4f788 | Georgios Gousios | Test coverage |
325 | bbd4f788 | Georgios Gousios | ------------- |
326 | bbd4f788 | Georgios Gousios | |
327 | bbd4f788 | Georgios Gousios | In order to get code coverage reports you need to install django-test-coverage |
328 | bbd4f788 | Georgios Gousios | |
329 | bbd4f788 | Georgios Gousios | $ ./bin/pip install django-test-coverage |
330 | bbd4f788 | Georgios Gousios | |
331 | bbd4f788 | Georgios Gousios | Then edit your settings.py and configure the test runner: |
332 | bbd4f788 | Georgios Gousios | |
333 | bbd4f788 | Georgios Gousios | TEST_RUNNER = 'django-test-coverage.runner.run_tests' |