Commit 2d2ffc6f5c0d9b487cef3079ce3e9d578e5775a9
Exists in
master
and in
4 other branches
Merge pull request #1666 from zzet/feature/postgres
Postgresql
Showing
7 changed files
with
136 additions
and
3 deletions
Show diff stats
.travis.yml
1 | env: | 1 | env: |
2 | + - DB=postgresql | ||
2 | - DB=mysql | 3 | - DB=mysql |
3 | before_install: | 4 | before_install: |
4 | - sudo apt-get install libicu-dev -y | 5 | - sudo apt-get install libicu-dev -y |
@@ -11,6 +12,7 @@ rvm: | @@ -11,6 +12,7 @@ rvm: | ||
11 | - 1.9.3 | 12 | - 1.9.3 |
12 | services: | 13 | services: |
13 | - mysql | 14 | - mysql |
15 | + - postgresql | ||
14 | before_script: | 16 | before_script: |
15 | - "cp config/database.yml.$DB config/database.yml" | 17 | - "cp config/database.yml.$DB config/database.yml" |
16 | - "cp config/gitlab.yml.example config/gitlab.yml" | 18 | - "cp config/gitlab.yml.example config/gitlab.yml" |
Gemfile
@@ -11,8 +11,9 @@ end | @@ -11,8 +11,9 @@ end | ||
11 | gem "rails", "3.2.8" | 11 | gem "rails", "3.2.8" |
12 | 12 | ||
13 | # Supported DBs | 13 | # Supported DBs |
14 | -gem "sqlite3" | ||
15 | -gem "mysql2" | 14 | +gem "sqlite3", :group => :sqlite |
15 | +gem "mysql2", :group => :mysql | ||
16 | +gem "pg", :group => :postgres | ||
16 | 17 | ||
17 | # Auth | 18 | # Auth |
18 | gem "devise", "~> 2.1.0" | 19 | gem "devise", "~> 2.1.0" |
Gemfile.lock
@@ -245,6 +245,7 @@ GEM | @@ -245,6 +245,7 @@ GEM | ||
245 | multi_json (~> 1.3) | 245 | multi_json (~> 1.3) |
246 | omniauth-oauth (~> 1.0) | 246 | omniauth-oauth (~> 1.0) |
247 | orm_adapter (0.3.0) | 247 | orm_adapter (0.3.0) |
248 | + pg (0.14.0) | ||
248 | polyglot (0.3.3) | 249 | polyglot (0.3.3) |
249 | posix-spawn (0.3.6) | 250 | posix-spawn (0.3.6) |
250 | pry (0.9.9.6) | 251 | pry (0.9.9.6) |
@@ -441,6 +442,7 @@ DEPENDENCIES | @@ -441,6 +442,7 @@ DEPENDENCIES | ||
441 | omniauth-google-oauth2 | 442 | omniauth-google-oauth2 |
442 | omniauth-ldap! | 443 | omniauth-ldap! |
443 | omniauth-twitter | 444 | omniauth-twitter |
445 | + pg | ||
444 | pry | 446 | pry |
445 | pygments.rb (= 0.3.1) | 447 | pygments.rb (= 0.3.1) |
446 | rack-mini-profiler | 448 | rack-mini-profiler |
@@ -0,0 +1,48 @@ | @@ -0,0 +1,48 @@ | ||
1 | +# | ||
2 | +# PRODUCTION | ||
3 | +# | ||
4 | +production: | ||
5 | + adapter: postgresql | ||
6 | + encoding: unicode | ||
7 | + database: gitlabhq_production | ||
8 | + pool: 5 | ||
9 | + username: postgres | ||
10 | + password: | ||
11 | + # host: localhost | ||
12 | + # socket: /tmp/postgresql.sock | ||
13 | + | ||
14 | +# | ||
15 | +# Development specific | ||
16 | +# | ||
17 | +development: | ||
18 | + adapter: postgresql | ||
19 | + encoding: unicode | ||
20 | + database: gitlabhq_development | ||
21 | + pool: 5 | ||
22 | + username: postgres | ||
23 | + password: | ||
24 | + # socket: /tmp/postgresql.sock | ||
25 | + | ||
26 | +# | ||
27 | +# Staging specific | ||
28 | +# | ||
29 | +staging: | ||
30 | + adapter: postgresql | ||
31 | + encoding: unicode | ||
32 | + database: gitlabhq_staging | ||
33 | + pool: 5 | ||
34 | + username: postgres | ||
35 | + password: | ||
36 | + # socket: /tmp/postgresql.sock | ||
37 | + | ||
38 | +# Warning: The database defined as "test" will be erased and | ||
39 | +# re-generated from your development database when you run "rake". | ||
40 | +# Do not set this db to the same as development or production. | ||
41 | +test: &test | ||
42 | + adapter: postgresql | ||
43 | + encoding: unicode | ||
44 | + database: gitlabhq_test | ||
45 | + pool: 5 | ||
46 | + username: postgres | ||
47 | + password: | ||
48 | + # socket: /tmp/postgresql.sock |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) | ||
2 | + class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter | ||
3 | + class TableDefinition | ||
4 | + def text(*args) | ||
5 | + options = args.extract_options! | ||
6 | + options.delete(:limit) | ||
7 | + column_names = args | ||
8 | + type = :text | ||
9 | + column_names.each { |name| column(name, type, options) } | ||
10 | + end | ||
11 | + end | ||
12 | + | ||
13 | + def add_column_with_limit_filter(table_name, column_name, type, options = {}) | ||
14 | + options.delete(:limit) if type == :text | ||
15 | + add_column_without_limit_filter(table_name, column_name, type, options) | ||
16 | + end | ||
17 | + | ||
18 | + def change_column_with_limit_filter(table_name, column_name, type, options = {}) | ||
19 | + options.delete(:limit) if type == :text | ||
20 | + change_column_without_limit_filter(table_name, column_name, type, options) | ||
21 | + end | ||
22 | + | ||
23 | + alias_method_chain :add_column, :limit_filter | ||
24 | + alias_method_chain :change_column, :limit_filter | ||
25 | + end | ||
26 | +end |
db/migrate/20121009205010_postgres_create_integer_cast.rb
0 → 100644
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +class PostgresCreateIntegerCast < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + execute <<-SQL | ||
4 | + CREATE CAST (integer AS text) WITH INOUT AS IMPLICIT; | ||
5 | + SQL | ||
6 | + rescue ActiveRecord::StatementInvalid | ||
7 | + end | ||
8 | + | ||
9 | + def down | ||
10 | + execute <<-SQL | ||
11 | + DROP CAST (integer AS text); | ||
12 | + SQL | ||
13 | + rescue ActiveRecord::StatementInvalid | ||
14 | + end | ||
15 | +end |
doc/installation.md
@@ -75,6 +75,9 @@ Now install the required packages: | @@ -75,6 +75,9 @@ Now install the required packages: | ||
75 | # If you want to use MySQL: | 75 | # If you want to use MySQL: |
76 | sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev | 76 | sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev |
77 | 77 | ||
78 | + # If you want to use PostgreSQL: | ||
79 | + sudo apt-get install -y postgresql-9.2 postgresql-server-dev-9.2 | ||
80 | + | ||
78 | # 2. Install Ruby | 81 | # 2. Install Ruby |
79 | 82 | ||
80 | wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz | 83 | wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz |
@@ -188,9 +191,45 @@ and ensure you have followed all of the above steps carefully. | @@ -188,9 +191,45 @@ and ensure you have followed all of the above steps carefully. | ||
188 | # Exit MySQL Server and copy the example config, make sure to update username/password in config/database.yml | 191 | # Exit MySQL Server and copy the example config, make sure to update username/password in config/database.yml |
189 | sudo -u gitlab cp config/database.yml.example config/database.yml | 192 | sudo -u gitlab cp config/database.yml.example config/database.yml |
190 | 193 | ||
194 | + # Or | ||
195 | + # PostgreSQL | ||
196 | + # Install PostgreSQL as directed in Step #1 | ||
197 | + | ||
198 | + # Connect to database server | ||
199 | + sudo -u postgres psql -d template1 | ||
200 | + | ||
201 | + # Add a user called gitlab. Change $password to a real password | ||
202 | + template1=# CREATE USER gitlab WITH PASSWORD '$password'; | ||
203 | + | ||
204 | + # Create the GitLab production database | ||
205 | + template1=# CREATE DATABASE IF NOT EXISTS gitlabhq_production; | ||
206 | + | ||
207 | + # Grant all privileges on database | ||
208 | + template1=# GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab; | ||
209 | + | ||
210 | + # Quit from PostgreSQL server | ||
211 | + template1=# \q | ||
212 | + | ||
213 | + # Try connect to new database | ||
214 | + $ su - gitlab | ||
215 | + $ psql -d gitlabhq_production -U gitlab | ||
216 | + | ||
217 | + # Exit PostgreSQL Server and copy the example config, make sure to update username/password in config/database.yml | ||
218 | + sudo -u gitlab cp config/database.yml.postgres config/database.yml | ||
219 | + | ||
220 | + # If you need create development, test, staging or another database | ||
221 | + # Repeate some steps with actual commands | ||
222 | + | ||
191 | #### Install gems | 223 | #### Install gems |
192 | 224 | ||
193 | - sudo -u gitlab -H bundle install --without development test --deployment | 225 | + # Please, check Gemfile before run bundle install |
226 | + # Select database gem, wich you will use | ||
227 | + # or run to setup gems with mysql usage | ||
228 | + sudo -u gitlab -H bundle install --without development test sqlite postgres --deployment | ||
229 | + # or postgres | ||
230 | + sudo -u gitlab -H bundle install --without development test sqlite mysql --deployment | ||
231 | + # or sqlite | ||
232 | + sudo -u gitlab -H bundle install --without development test mysql postgres --deployment | ||
194 | 233 | ||
195 | #### Setup database | 234 | #### Setup database |
196 | 235 |