strong_migrations 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0871a07d2e13749e0f984373c303dd837d7ea95
4
- data.tar.gz: 146fa1034aa8c8c8d5094b0bffa5079e728e6c54
3
+ metadata.gz: 802c5c2d23094377d345af4b5024f7b59234c57d
4
+ data.tar.gz: 5c6d8799de8f254ce8cad115f348a4f36c81b4d2
5
5
  SHA512:
6
- metadata.gz: 4743a779ecede6c6fca241a2f7c0eee01e46c24c79b5af071f850fb4ced23c852f9390f49afbe97323dd247d1dd0a378a3001f0ed6ba57839a34ce3e29ab9b0c
7
- data.tar.gz: 8ed8682c0b22ba7c0f7881b9036e6c6e02dc40ffd7f112c08403c0276cbc986f8672e4f3b759ddaeb2b2dd4fc6b7825923917e078c9861a4f887713098cf005c
6
+ metadata.gz: 26e985a319fb114d949a22346f276d4fc4102f370416d3a96c8adbd65192b0af8289d06e30666f54562c4638803711c6794c1abaf90273579cbab3d9a0ab6392
7
+ data.tar.gz: 6c5f3aee2424a5bf1e87373c18b90f8eb71518316b817dd8b7faec715b0895065fa066c653730558ecee1a0f54db3127a6733f6568a734b5701b5da8c106b0c7
data/.travis.yml CHANGED
@@ -9,7 +9,13 @@ gemfile:
9
9
  script: bundle exec rake test
10
10
  before_script:
11
11
  - psql -c 'create database strong_migrations_test;' -U postgres
12
+ - mysql -e 'create database strong_migrations_test;'
12
13
  notifications:
13
14
  email:
14
15
  on_success: never
15
16
  on_failure: change
17
+ matrix:
18
+ include:
19
+ - gemfile: test/gemfiles/mysql2.gemfile
20
+ env: ADAPTER=mysql2
21
+ rvm: 2.2
data/README.md CHANGED
@@ -14,13 +14,13 @@ gem 'strong_migrations'
14
14
 
15
15
  ## Dangerous Operations
16
16
 
17
- - adding an index non-concurrently
18
- - adding a column with a non-null default value
17
+ - adding a column with a non-null default value to an existing table
19
18
  - changing the type of a column
20
19
  - renaming a table
21
20
  - renaming a column
22
21
  - removing a column
23
- - adding a `json` column (Postgres only)
22
+ - adding an index non-concurrently (Postgres only)
23
+ - adding a `json` column to an existing table (Postgres only)
24
24
 
25
25
  For more info, check out:
26
26
 
@@ -29,19 +29,6 @@ For more info, check out:
29
29
 
30
30
  ## The Zero Downtime Way
31
31
 
32
- ### Adding an index
33
-
34
- Add indexes concurrently.
35
-
36
- ```ruby
37
- class AddSomeIndexToUsers < ActiveRecord::Migration
38
- def change
39
- commit_db_transaction
40
- add_index :users, :some_index, algorithm: :concurrently
41
- end
42
- end
43
- ```
44
-
45
32
  ### Adding a column with a default value
46
33
 
47
34
  1. Add the column without a default value
@@ -75,8 +62,6 @@ end
75
62
 
76
63
  ### Renaming or changing the type of a column
77
64
 
78
- There’s no way to do this without downtime.
79
-
80
65
  If you really have to:
81
66
 
82
67
  1. Create a new column
@@ -88,11 +73,18 @@ If you really have to:
88
73
 
89
74
  ### Renaming a table
90
75
 
91
- Same as renaming a column - see above.
76
+ If you really have to:
77
+
78
+ 1. Create a new table
79
+ 2. Write to both tables
80
+ 3. Backfill data from the old table to new table
81
+ 4. Move reads from the old table to the new table
82
+ 5. Stop writing to the old table
83
+ 6. Drop the old table
92
84
 
93
85
  ### Removing a column
94
86
 
95
- Tell ActiveRecord to [ignore the column](http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/) from its cache.
87
+ Tell ActiveRecord to ignore the column from its cache.
96
88
 
97
89
  ```ruby
98
90
  class User
@@ -104,9 +96,22 @@ end
104
96
 
105
97
  Once it’s deployed, create a migration to remove the column.
106
98
 
107
- ### Adding a json column
99
+ ### Adding an index (Postgres)
100
+
101
+ Add indexes concurrently.
102
+
103
+ ```ruby
104
+ class AddSomeIndexToUsers < ActiveRecord::Migration
105
+ def change
106
+ commit_db_transaction
107
+ add_index :users, :some_index, algorithm: :concurrently
108
+ end
109
+ end
110
+ ```
111
+
112
+ ### Adding a json column (Postgres)
108
113
 
109
- There’s no equality operator for the `json` column type. Replace all calls to `uniq` with a custom scope.
114
+ There’s no equality operator for the `json` column type, which causes issues for `SELECT DISTINCT` queries. Replace all calls to `uniq` with a custom scope.
110
115
 
111
116
  ```ruby
112
117
  scope :uniq_on_id, -> { select("DISTINCT ON (your_table.id) your_table.*") }
@@ -23,7 +23,7 @@ module StrongMigrations
23
23
  raise_error :rename_column
24
24
  when :add_index
25
25
  options = args[2]
26
- unless options && options[:algorithm] == :concurrently
26
+ if %w(PostgreSQL PostGIS).include?(connection.adapter_name) && !(options && options[:algorithm] == :concurrently)
27
27
  raise_error :add_index
28
28
  end
29
29
  when :add_column
@@ -83,9 +83,7 @@ end
83
83
 
84
84
  Once it's deployed, wrap this step in a safety_assured { ... } block."
85
85
  when :rename_column
86
- "There's no way to rename a column without downtime.
87
-
88
- If you really have to:
86
+ "If you really have to:
89
87
 
90
88
  1. Create a new column
91
89
  2. Write to both columns
@@ -94,9 +92,7 @@ If you really have to:
94
92
  5. Stop writing to the old column
95
93
  6. Drop the old column"
96
94
  when :rename_table
97
- "There's no way to rename a table without downtime.
98
-
99
- If you really have to:
95
+ "If you really have to:
100
96
 
101
97
  1. Create a new table
102
98
  2. Write to both tables
@@ -1,3 +1,3 @@
1
1
  module StrongMigrations
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency "activerecord", ">= 3.2.0"
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.10"
23
- spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "bundler"
23
+ spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "minitest"
25
25
  spec.add_development_dependency "pg"
26
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strong_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Remeika
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2015-11-23 00:00:00.000000000 Z
13
+ date: 2015-11-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -30,30 +30,30 @@ dependencies:
30
30
  name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - "~>"
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: '1.10'
35
+ version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: '1.10'
42
+ version: '0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rake
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '10.0'
49
+ version: '0'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: '10.0'
56
+ version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: minitest
59
59
  requirement: !ruby/object:Gem::Requirement