Chiliproject » Historique » Version 8
Mehdi Abaakouk, 15/04/2014 18:10
1 | 8 | Mehdi Abaakouk | {{>toc}} |
---|---|---|---|
2 | 1 | Mehdi Abaakouk | h1. Chiliproject |
3 | 1 | Mehdi Abaakouk | |
4 | 1 | Mehdi Abaakouk | La machine chiliproject contient: |
5 | 1 | Mehdi Abaakouk | |
6 | 5 | Mehdi Abaakouk | - une base données postgres |
7 | 5 | Mehdi Abaakouk | - une application installé dans /srv/http/chiliproject-X.X.X |
8 | 5 | Mehdi Abaakouk | - le git de git.tetaneutral.net dans /srv/http/repositories |
9 | 1 | Mehdi Abaakouk | |
10 | 1 | Mehdi Abaakouk | h2. L'application: |
11 | 1 | Mehdi Abaakouk | |
12 | 5 | Mehdi Abaakouk | Le vhost d'apache est /etc/apache2/sites-enabled/chiliproject.tetaneutral.net, il pointe vers le répertoire /srv/http/chiliproject qui est un lien symbolique vers /srv/http/chiliproject-X.X.X |
13 | 1 | Mehdi Abaakouk | |
14 | 5 | Mehdi Abaakouk | La procédure de mise à jour est la suivante: |
15 | 1 | Mehdi Abaakouk | <pre> |
16 | 1 | Mehdi Abaakouk | /etc/init.d/apache2 stop |
17 | 5 | Mehdi Abaakouk | # su - postgres |
18 | 1 | Mehdi Abaakouk | # pgdump chiliproject > chiliproject-3.X.X-20130108.sql |
19 | 1 | Mehdi Abaakouk | # exit |
20 | 5 | Mehdi Abaakouk | # cd /srv/http/chiliproject |
21 | 4 | Mehdi Abaakouk | # git fetch origin |
22 | 5 | Mehdi Abaakouk | # git branch ttnn-prod-3.6.0 # Création d'un nouvelle branche qui contient les modifications ttnn |
23 | 4 | Mehdi Abaakouk | # git checkout ttnn-prod-3.6.0 # Utilisation de cette branche |
24 | 5 | Mehdi Abaakouk | # git rebase v3.6.0 # rebase la branche ttnn avec la dernière version de chiliproject |
25 | 1 | Mehdi Abaakouk | </pre> |
26 | 1 | Mehdi Abaakouk | |
27 | 5 | Mehdi Abaakouk | Et continuer les étapes 4 à 10 du howto de chiliproject (cf: https://www.chiliproject.org/projects/chiliproject/wiki/Upgrade#Step-4-Library-installation) |
28 | 3 | Mehdi Abaakouk | Version rapide: |
29 | 3 | Mehdi Abaakouk | <pre> |
30 | 4 | Mehdi Abaakouk | bundle update |
31 | 4 | Mehdi Abaakouk | gem cleanup |
32 | 4 | Mehdi Abaakouk | bundle update |
33 | 2 | Mehdi Abaakouk | bundle exec rake generate_session_store |
34 | 1 | Mehdi Abaakouk | bundle exec rake db:migrate RAILS_ENV=production |
35 | 1 | Mehdi Abaakouk | bundle exec rake db:migrate:plugins RAILS_ENV=production |
36 | 3 | Mehdi Abaakouk | bundle exec rake tmp:cache:clear |
37 | 3 | Mehdi Abaakouk | bundle exec rake tmp:sessions:clear |
38 | 3 | Mehdi Abaakouk | </pre> |
39 | 3 | Mehdi Abaakouk | |
40 | 3 | Mehdi Abaakouk | |
41 | 3 | Mehdi Abaakouk | Restart de chili |
42 | 3 | Mehdi Abaakouk | <pre> |
43 | 3 | Mehdi Abaakouk | /etc/init.d/apache2 start |
44 | 1 | Mehdi Abaakouk | </pre> |
45 | 1 | Mehdi Abaakouk | |
46 | 1 | Mehdi Abaakouk | h2. La DB du postgres normal: |
47 | 1 | Mehdi Abaakouk | |
48 | 1 | Mehdi Abaakouk | <pre> |
49 | 5 | Mehdi Abaakouk | # su - postgres |
50 | 1 | Mehdi Abaakouk | # psql chiliproject |
51 | 1 | Mehdi Abaakouk | chiliproject=# \dt |
52 | 1 | Mehdi Abaakouk | public | attachments | table | chiliproject |
53 | 1 | Mehdi Abaakouk | public | auth_sources | table | chiliproject |
54 | 1 | Mehdi Abaakouk | public | boards | table | chiliproject |
55 | 1 | Mehdi Abaakouk | public | changes | table | chiliproject |
56 | 1 | Mehdi Abaakouk | public | changesets | table | chiliproject |
57 | 1 | Mehdi Abaakouk | public | changesets_issues | table | chiliproject |
58 | 1 | Mehdi Abaakouk | public | comments | table | chiliproject |
59 | 1 | Mehdi Abaakouk | public | custom_fields | table | chiliproject |
60 | 1 | Mehdi Abaakouk | public | custom_fields_projects | table | chiliproject |
61 | 1 | Mehdi Abaakouk | public | custom_fields_trackers | table | chiliproject |
62 | 1 | Mehdi Abaakouk | public | custom_values | table | chiliproject |
63 | 1 | Mehdi Abaakouk | public | documents | table | chiliproject |
64 | 1 | Mehdi Abaakouk | public | enabled_modules | table | chiliproject |
65 | 1 | Mehdi Abaakouk | public | enumerations | table | chiliproject |
66 | 1 | Mehdi Abaakouk | public | groups_users | table | chiliproject |
67 | 1 | Mehdi Abaakouk | public | issue_categories | table | chiliproject |
68 | 1 | Mehdi Abaakouk | public | issue_relations | table | chiliproject |
69 | 1 | Mehdi Abaakouk | public | issue_statuses | table | chiliproject |
70 | 1 | Mehdi Abaakouk | public | issues | table | chiliproject |
71 | 1 | Mehdi Abaakouk | public | journal_details | table | chiliproject |
72 | 1 | Mehdi Abaakouk | public | journals | table | chiliproject |
73 | 1 | Mehdi Abaakouk | public | member_roles | table | chiliproject |
74 | 1 | Mehdi Abaakouk | public | members | table | chiliproject |
75 | 1 | Mehdi Abaakouk | public | messages | table | chiliproject |
76 | 1 | Mehdi Abaakouk | public | news | table | chiliproject |
77 | 1 | Mehdi Abaakouk | public | open_id_authentication_associations | table | chiliproject |
78 | 1 | Mehdi Abaakouk | public | open_id_authentication_nonces | table | chiliproject |
79 | 1 | Mehdi Abaakouk | public | projects | table | chiliproject |
80 | 1 | Mehdi Abaakouk | public | projects_trackers | table | chiliproject |
81 | 1 | Mehdi Abaakouk | public | queries | table | chiliproject |
82 | 1 | Mehdi Abaakouk | public | repositories | table | chiliproject |
83 | 1 | Mehdi Abaakouk | public | roles | table | chiliproject |
84 | 1 | Mehdi Abaakouk | public | schema_migrations | table | chiliproject |
85 | 1 | Mehdi Abaakouk | public | settings | table | chiliproject |
86 | 1 | Mehdi Abaakouk | public | taggings | table | chiliproject |
87 | 1 | Mehdi Abaakouk | public | tags | table | chiliproject |
88 | 1 | Mehdi Abaakouk | public | time_entries | table | chiliproject |
89 | 1 | Mehdi Abaakouk | public | tokens | table | chiliproject |
90 | 1 | Mehdi Abaakouk | public | trackers | table | chiliproject |
91 | 1 | Mehdi Abaakouk | public | user_preferences | table | chiliproject |
92 | 1 | Mehdi Abaakouk | public | users | table | chiliproject |
93 | 1 | Mehdi Abaakouk | public | versions | table | chiliproject |
94 | 1 | Mehdi Abaakouk | public | watchers | table | chiliproject |
95 | 1 | Mehdi Abaakouk | public | wiki_content_versions | table | chiliproject |
96 | 1 | Mehdi Abaakouk | public | wiki_contents | table | chiliproject |
97 | 1 | Mehdi Abaakouk | public | wiki_pages | table | chiliproject |
98 | 1 | Mehdi Abaakouk | public | wiki_redirects | table | chiliproject |
99 | 1 | Mehdi Abaakouk | public | wikis | table | chiliproject |
100 | 1 | Mehdi Abaakouk | public | workflows | table | chiliproject |
101 | 1 | Mehdi Abaakouk | </pre> |
102 | 6 | Mehdi Abaakouk | |
103 | 6 | Mehdi Abaakouk | h3. Draft migration to redmine |
104 | 6 | Mehdi Abaakouk | |
105 | 6 | Mehdi Abaakouk | <pre> |
106 | 6 | Mehdi Abaakouk | # -*- coding: utf-8 -*- |
107 | 6 | Mehdi Abaakouk | # vim: ts=4: set ft=sh |
108 | 6 | Mehdi Abaakouk | # |
109 | 6 | Mehdi Abaakouk | # CC-BY Mehdi Abaakouk <sileht@sileht.net> |
110 | 6 | Mehdi Abaakouk | # Inpired from this ruby/mysql version: https://gist.github.com/pallan/6663018 |
111 | 6 | Mehdi Abaakouk | # |
112 | 6 | Mehdi Abaakouk | |
113 | 6 | Mehdi Abaakouk | # On postgres User |
114 | 6 | Mehdi Abaakouk | |
115 | 6 | Mehdi Abaakouk | $ createuser -P redmine |
116 | 6 | Mehdi Abaakouk | $ createdb redmine -O redmine |
117 | 6 | Mehdi Abaakouk | $ pg_dump chiliproject > toredmine.sql |
118 | 6 | Mehdi Abaakouk | $ psql redmine < toredmine.sql |
119 | 6 | Mehdi Abaakouk | |
120 | 6 | Mehdi Abaakouk | $ psql redmine <<EOF |
121 | 6 | Mehdi Abaakouk | ALTER DATABASE redmine OWNER TO redmine; |
122 | 6 | Mehdi Abaakouk | REASSIGN OWNED BY chiliproject TO redmine; |
123 | 6 | Mehdi Abaakouk | |
124 | 6 | Mehdi Abaakouk | ALTER TABLE journals RENAME COLUMN created_at TO created_on; |
125 | 6 | Mehdi Abaakouk | ALTER TABLE journals RENAME COLUMN journaled_id TO journalized_id; |
126 | 6 | Mehdi Abaakouk | ALTER TABLE journals RENAME COLUMN activity_type TO journalized_type; |
127 | 6 | Mehdi Abaakouk | ALTER TABLE journals ALTER COLUMN journalized_type TYPE character varying(30); |
128 | 6 | Mehdi Abaakouk | ALTER TABLE journals ALTER COLUMN journalized_type SET NOT NULL; |
129 | 6 | Mehdi Abaakouk | ALTER TABLE journals ALTER COLUMN journalized_type SET DEFAULT ''::character varying ; |
130 | 6 | Mehdi Abaakouk | EOF |
131 | 6 | Mehdi Abaakouk | |
132 | 6 | Mehdi Abaakouk | |
133 | 6 | Mehdi Abaakouk | # On root: |
134 | 6 | Mehdi Abaakouk | |
135 | 6 | Mehdi Abaakouk | $ cd /srv/http |
136 | 6 | Mehdi Abaakouk | $ tsocks git clone https://github.com/redmine/redmine.git -b 2.5-stable |
137 | 6 | Mehdi Abaakouk | $ cd redmine |
138 | 6 | Mehdi Abaakouk | |
139 | 6 | Mehdi Abaakouk | $ cat > config/database.yml <<EOF |
140 | 6 | Mehdi Abaakouk | production: |
141 | 6 | Mehdi Abaakouk | adapter: postgresql |
142 | 6 | Mehdi Abaakouk | database: redmine |
143 | 6 | Mehdi Abaakouk | host: localhost |
144 | 6 | Mehdi Abaakouk | username: redmine |
145 | 6 | Mehdi Abaakouk | password: redmine |
146 | 6 | Mehdi Abaakouk | EOF |
147 | 6 | Mehdi Abaakouk | |
148 | 6 | Mehdi Abaakouk | $ tsocks bundle install --without development test rmagick |
149 | 7 | Mehdi Abaakouk | $ bundle exec rake generate_secret_token |
150 | 6 | Mehdi Abaakouk | $ RAILS_ENV=production bundle exec rake db:migrate |
151 | 6 | Mehdi Abaakouk | |
152 | 6 | Mehdi Abaakouk | |
153 | 6 | Mehdi Abaakouk | # On postgres user: |
154 | 6 | Mehdi Abaakouk | |
155 | 6 | Mehdi Abaakouk | $ psql redmine <<EOF |
156 | 6 | Mehdi Abaakouk | ALTER TABLE wiki_contents ADD comments VARCHAR(250) NULL; |
157 | 6 | Mehdi Abaakouk | ALTER TABLE wiki_contents RENAME COLUMN lock_version TO version; |
158 | 6 | Mehdi Abaakouk | ALTER TABLE wiki_contents ALTER COLUMN version TYPE INTEGER; |
159 | 6 | Mehdi Abaakouk | ALTER TABLE wiki_contents ALTER COLUMN version SET NOT NULL; |
160 | 6 | Mehdi Abaakouk | |
161 | 7 | Mehdi Abaakouk | UPDATE journals SET journalized_type='Issue' WHERE journalized_type='issues'; |
162 | 6 | Mehdi Abaakouk | |
163 | 6 | Mehdi Abaakouk | ALTER TABLE journals RENAME COLUMN changes TO changes_chili; |
164 | 6 | Mehdi Abaakouk | ALTER TABLE journals DROP COLUMN type; |
165 | 6 | Mehdi Abaakouk | EOF |
166 | 6 | Mehdi Abaakouk | |
167 | 6 | Mehdi Abaakouk | |
168 | 6 | Mehdi Abaakouk | $ python <<EOF |
169 | 6 | Mehdi Abaakouk | import yaml; |
170 | 6 | Mehdi Abaakouk | import psycopg2 |
171 | 6 | Mehdi Abaakouk | conn = psycopg2.connect("dbname='redmine' user='redmine' host='localhost' password='redmine'") |
172 | 7 | Mehdi Abaakouk | commit = 100 |
173 | 1 | Mehdi Abaakouk | cur = conn.cursor() |
174 | 7 | Mehdi Abaakouk | cur.execute("""SELECT id, version, journalized_type, journalized_id, changes_chili,created_on, notes, user_id FROM journals order by version desc""") |
175 | 1 | Mehdi Abaakouk | rows = cur.fetchall() |
176 | 7 | Mehdi Abaakouk | cur.close() |
177 | 7 | Mehdi Abaakouk | dataissue = [] |
178 | 7 | Mehdi Abaakouk | datawiki = [] |
179 | 1 | Mehdi Abaakouk | for row in rows: |
180 | 7 | Mehdi Abaakouk | id = row[0] |
181 | 7 | Mehdi Abaakouk | version = int(row[1]) |
182 | 7 | Mehdi Abaakouk | type = row[2] |
183 | 7 | Mehdi Abaakouk | jid = row[3] |
184 | 7 | Mehdi Abaakouk | raw_changes = row[4] |
185 | 7 | Mehdi Abaakouk | created_on = row[5] |
186 | 7 | Mehdi Abaakouk | notes = row[6] |
187 | 7 | Mehdi Abaakouk | user_id = row[7] |
188 | 7 | Mehdi Abaakouk | if type in ["time_entries", "documents"]: # only have 1 item each |
189 | 7 | Mehdi Abaakouk | continue |
190 | 7 | Mehdi Abaakouk | elif type == "attachments": # 163 |
191 | 7 | Mehdi Abaakouk | continue |
192 | 7 | Mehdi Abaakouk | elif type == "messages": # 3 |
193 | 7 | Mehdi Abaakouk | continue |
194 | 7 | Mehdi Abaakouk | elif type == ["Issue", "attachments"] and version > 1: |
195 | 7 | Mehdi Abaakouk | changes = yaml.load(raw_changes) |
196 | 7 | Mehdi Abaakouk | for k, v in changes.iteritems(): |
197 | 7 | Mehdi Abaakouk | if k == "attachment": |
198 | 7 | Mehdi Abaakouk | property = 'attachment' |
199 | 7 | Mehdi Abaakouk | prop_key = re.sub("\d+", "", k) |
200 | 7 | Mehdi Abaakouk | elif k == "custom_values": |
201 | 7 | Mehdi Abaakouk | property = 'cf' |
202 | 7 | Mehdi Abaakouk | prop_key = re.sub("\d+", "", k) |
203 | 7 | Mehdi Abaakouk | else: |
204 | 7 | Mehdi Abaakouk | property = 'attr' |
205 | 7 | Mehdi Abaakouk | prop_key = k |
206 | 7 | Mehdi Abaakouk | dataissue.append({'id': id, |
207 | 7 | Mehdi Abaakouk | 'property': property, |
208 | 7 | Mehdi Abaakouk | 'prop_key': prop_key, |
209 | 7 | Mehdi Abaakouk | 'old_value': v[0], |
210 | 7 | Mehdi Abaakouk | 'new_value': v[1], |
211 | 7 | Mehdi Abaakouk | }) |
212 | 7 | Mehdi Abaakouk | elif type == "wiki_edits": |
213 | 7 | Mehdi Abaakouk | changes = yaml.load(raw_changes) |
214 | 7 | Mehdi Abaakouk | datawiki.append({ |
215 | 7 | Mehdi Abaakouk | 'id': id, |
216 | 7 | Mehdi Abaakouk | 'wiki_content_id': jid, |
217 | 7 | Mehdi Abaakouk | 'page_id': jid, |
218 | 7 | Mehdi Abaakouk | 'author_id': user_id, |
219 | 7 | Mehdi Abaakouk | 'data': bytearray(changes.get('data'), encoding="utf-8"), |
220 | 7 | Mehdi Abaakouk | 'compression': changes.get('compression', None), |
221 | 7 | Mehdi Abaakouk | 'updated_on': created_on, |
222 | 7 | Mehdi Abaakouk | 'comments': notes, |
223 | 7 | Mehdi Abaakouk | 'version': version, |
224 | 7 | Mehdi Abaakouk | }) |
225 | 7 | Mehdi Abaakouk | if len(dataissue) > commit: |
226 | 7 | Mehdi Abaakouk | cur = conn.cursor() |
227 | 7 | Mehdi Abaakouk | cur.executemany("""INSERT INTO journal_details (journal_id, property, prop_key, old_value, value) VALUES (%(id)s,%(property)s,%(prop_key)s,%(old_value)s,%(new_value)s)""", dataissue) |
228 | 7 | Mehdi Abaakouk | cur.close() |
229 | 7 | Mehdi Abaakouk | dataissue = [] |
230 | 7 | Mehdi Abaakouk | if len(datawiki) > commit: |
231 | 7 | Mehdi Abaakouk | cur = conn.cursor() |
232 | 7 | Mehdi Abaakouk | cur.executemany("""INSERT INTO wiki_content_versions (id, wiki_content_id, page_id, author_id, data, compression, comments, updated_on, version) VALUES (%(id)s, %(wiki_content_id)s, %(page_id)s, %(author_id)s, %(data)s, %(compression)s, %(comments)s, %(updated_on)s, %(version)s)""", datawiki) |
233 | 7 | Mehdi Abaakouk | cur.close() |
234 | 7 | Mehdi Abaakouk | datawiki = [] |
235 | 7 | Mehdi Abaakouk | |
236 | 6 | Mehdi Abaakouk | |
237 | 7 | Mehdi Abaakouk | cur = conn.cursor() |
238 | 7 | Mehdi Abaakouk | cur.executemany("""INSERT INTO journal_details (journal_id, property, prop_key, old_value, value) VALUES (%(id)s,%(property)s,%(prop_key)s,%(old_value)s,%(new_value)s)""", dataissue) |
239 | 6 | Mehdi Abaakouk | cur.close() |
240 | 7 | Mehdi Abaakouk | cur = conn.cursor() |
241 | 7 | Mehdi Abaakouk | cur.executemany("""INSERT INTO wiki_content_versions (id, wiki_content_id, page_id, author_id, data, compression, comments, updated_on, version) VALUES (%(id)s, %(wiki_content_id)s, %(page_id)s, %(author_id)s, %(data)s, %(compression)s, %(comments)s, %(updated_on)s, %(version)s)""", datawiki) |
242 | 7 | Mehdi Abaakouk | cur.close() |
243 | 7 | Mehdi Abaakouk | conn.commit() |
244 | 6 | Mehdi Abaakouk | conn.close() |
245 | 6 | Mehdi Abaakouk | EOF |
246 | 6 | Mehdi Abaakouk | |
247 | 6 | Mehdi Abaakouk | $ psql redmine <<EOF |
248 | 6 | Mehdi Abaakouk | DELETE FROM journals WHERE (notes IS NULL OR notes = '' ) AND changes_chili IS NOT NULL AND NOT EXISTS (SELECT 1 FROM journal_details x where x.journal_id=journals.id); |
249 | 6 | Mehdi Abaakouk | ALTER TABLE journals DROP COLUMN changes_chili; |
250 | 6 | Mehdi Abaakouk | ALTER TABLE journals DROP COLUMN version; |
251 | 6 | Mehdi Abaakouk | EOF |
252 | 6 | Mehdi Abaakouk | |
253 | 6 | Mehdi Abaakouk | # On root in /srv/http/redmine: |
254 | 6 | Mehdi Abaakouk | |
255 | 6 | Mehdi Abaakouk | $ RAILS_ENV=production REDMINE_LANG=fr bundle exec rake redmine:load_default_data |
256 | 6 | Mehdi Abaakouk | </pre> |