bankai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.overcommit.yml +22 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/README.md +72 -0
- data/Rakefile +6 -0
- data/bankai.gemspec +38 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/bankai +27 -0
- data/lib/bankai/builder.rb +82 -0
- data/lib/bankai/generator.rb +99 -0
- data/lib/bankai/generators/base.rb +20 -0
- data/lib/bankai/generators/ci_generator.rb +30 -0
- data/lib/bankai/generators/db_optimizations_generator.rb +33 -0
- data/lib/bankai/generators/deploy_generator.rb +45 -0
- data/lib/bankai/generators/json_generator.rb +15 -0
- data/lib/bankai/generators/lint_generator.rb +26 -0
- data/lib/bankai/generators/mailer_generator.rb +29 -0
- data/lib/bankai/generators/testing_generator.rb +35 -0
- data/lib/bankai/version.rb +7 -0
- data/lib/bankai.rb +10 -0
- data/templates/Gemfile.erb +110 -0
- data/templates/README.md.erb +233 -0
- data/templates/deploy.rb.erb +43 -0
- data/templates/dotfiles/.ctags +2 -0
- data/templates/dotfiles/.env.example +4 -0
- data/templates/gitignore.erb +61 -0
- data/templates/gitlab-ci.yml.erb +74 -0
- data/templates/overcommit.yml.erb +23 -0
- data/templates/rack_mini_profiler.rb +5 -0
- data/templates/rails_helper.rb +32 -0
- data/templates/rubocop.yml.erb +37 -0
- data/templates/spec/database_rewinder.rb +11 -0
- data/templates/spec/shoulda_matchers.rb +8 -0
- data/templates/spec_helper.rb +20 -0
- metadata +196 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class Base < Rails::Generators::Base
|
9
|
+
def self.default_source_root
|
10
|
+
File.expand_path(File.join('..', '..', '..', 'templates'), __dir__)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def app_name
|
16
|
+
Rails.app_class.parent_name.demodulize.underscore.dasherize
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class CiGenerator < Base
|
9
|
+
def configure_ci
|
10
|
+
template 'gitlab-ci.yml.erb', '.gitlab-ci.yml'
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
|
15
|
+
def pg?
|
16
|
+
gemfile.match?(/gem .pg./)
|
17
|
+
end
|
18
|
+
|
19
|
+
def mysql?
|
20
|
+
gemfile.match?(/gem .mysql2./)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def gemfile
|
26
|
+
@gemfile ||= File.read(destination_root + '/Gemfile')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class DbOptimizationsGenerator < Base
|
9
|
+
def configure_bullet
|
10
|
+
inject_into_file(
|
11
|
+
'config/environments/development.rb',
|
12
|
+
configuration,
|
13
|
+
after: 'config.file_watcher = ' \
|
14
|
+
"ActiveSupport::EventedFileUpdateChecker\n"
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def configuration
|
21
|
+
<<-RUBY
|
22
|
+
|
23
|
+
config.after_initialize do
|
24
|
+
Bullet.enable = true
|
25
|
+
Bullet.bullet_logger = true
|
26
|
+
Bullet.rails_logger = true
|
27
|
+
Bullet.add_footer = true
|
28
|
+
end
|
29
|
+
RUBY
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class DeployGenerator < Base
|
9
|
+
def install_capistrano
|
10
|
+
Bundler.with_clean_env { run 'bundle exec cap install' }
|
11
|
+
end
|
12
|
+
|
13
|
+
def configure_capfile
|
14
|
+
inject_into_file(
|
15
|
+
'Capfile',
|
16
|
+
capistrano_plugins,
|
17
|
+
after: "# require \"capistrano/passenger\"\n"
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def replace_deploy_config
|
22
|
+
template 'deploy.rb.erb', 'config/deploy.rb', force: true
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def repo_url
|
28
|
+
res = `git remote get-url origin`
|
29
|
+
return 'git@example.com:me/my_repo.git' if res.blank?
|
30
|
+
|
31
|
+
res
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def capistrano_plugins
|
37
|
+
<<-RUBY
|
38
|
+
require "capistrano/bundler"
|
39
|
+
require "capistrano/rails/assets"
|
40
|
+
require "capistrano/rails/migrations"
|
41
|
+
RUBY
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class LintGenerator < Base
|
9
|
+
def configure_overcommit
|
10
|
+
template 'overcommit.yml.erb', '.overcommit.yml'
|
11
|
+
end
|
12
|
+
|
13
|
+
def configure_rubocop
|
14
|
+
template 'rubocop.yml.erb', '.rubocop.yml'
|
15
|
+
end
|
16
|
+
|
17
|
+
def install_overcommit
|
18
|
+
Bundler.with_clean_env { run 'bundle exec overcommit --install' }
|
19
|
+
end
|
20
|
+
|
21
|
+
def rubocop_autocorrect
|
22
|
+
Bundler.with_clean_env { run 'bundle exec rubocop --auto-correct' }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class MailerGenerator < Base
|
9
|
+
def configure_letter_opener
|
10
|
+
inject_into_file(
|
11
|
+
'config/environments/development.rb',
|
12
|
+
configuration,
|
13
|
+
after: 'config.file_watcher = ' \
|
14
|
+
"ActiveSupport::EventedFileUpdateChecker\n"
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def configuration
|
21
|
+
<<-RUBY
|
22
|
+
|
23
|
+
config.action_mailer.delivery_method = :letter_opener
|
24
|
+
config.action_mailer.perform_deliveries = true
|
25
|
+
RUBY
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Bankai
|
6
|
+
module Generators
|
7
|
+
# :nodoc:
|
8
|
+
class TestingGenerator < Base
|
9
|
+
def generate_rspec
|
10
|
+
generate 'rspec:install'
|
11
|
+
end
|
12
|
+
|
13
|
+
def configure_rspec
|
14
|
+
remove_file 'spec/rails_helper.rb'
|
15
|
+
remove_file 'spec/spec_helper.rb'
|
16
|
+
copy_file 'rails_helper.rb', 'spec/rails_helper.rb'
|
17
|
+
copy_file 'spec_helper.rb', 'spec/spec_helper.rb'
|
18
|
+
end
|
19
|
+
|
20
|
+
def provide_shoulda_matchers_config
|
21
|
+
copy_file(
|
22
|
+
'spec/shoulda_matchers.rb',
|
23
|
+
'spec/support/shoulda_matchers.rb'
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def provide_database_rewinder_config
|
28
|
+
copy_file(
|
29
|
+
'spec/database_rewinder.rb',
|
30
|
+
'spec/support/database_rewinder.rb'
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/bankai.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'bankai/version'
|
2
|
+
require 'bankai/generator'
|
3
|
+
require 'bankai/generators/testing_generator'
|
4
|
+
require 'bankai/generators/ci_generator'
|
5
|
+
require 'bankai/generators/json_generator'
|
6
|
+
require 'bankai/generators/db_optimizations_generator'
|
7
|
+
require 'bankai/generators/mailer_generator'
|
8
|
+
require 'bankai/generators/deploy_generator'
|
9
|
+
require 'bankai/generators/lint_generator'
|
10
|
+
require 'bankai/builder'
|
@@ -0,0 +1,110 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
+
|
4
|
+
ruby '<%= RUBY_VERSION -%>'
|
5
|
+
<% gemfile_entries.each do |gem| -%>
|
6
|
+
<% if gem.comment -%>
|
7
|
+
|
8
|
+
# <%= gem.comment %>
|
9
|
+
<% end -%>
|
10
|
+
<%= gem.commented_out ? '# ' : '' %>gem '<%= gem.name %>'<%= %(, '#{gem.version}') if gem.version -%>
|
11
|
+
<% if gem.options.any? -%>
|
12
|
+
, <%= gem.options.map { |k,v|
|
13
|
+
"#{k}: #{v.inspect}" }.join(', ') %>
|
14
|
+
<% end -%>
|
15
|
+
<% end -%>
|
16
|
+
|
17
|
+
# Use ActiveModel has_secure_password
|
18
|
+
# gem 'bcrypt', '~> 3.1.7'
|
19
|
+
<% unless skip_active_storage? -%>
|
20
|
+
|
21
|
+
# Use ActiveStorage variant
|
22
|
+
# gem 'mini_magick', '~> 4.8'
|
23
|
+
<% end -%>
|
24
|
+
|
25
|
+
<% if depend_on_bootsnap? -%>
|
26
|
+
# Reduces boot times through caching; required in config/boot.rb
|
27
|
+
gem 'bootsnap', '>= 1.1.0', require: false
|
28
|
+
|
29
|
+
<%- end -%>
|
30
|
+
<%- if options.api? -%>
|
31
|
+
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
|
32
|
+
# gem 'rack-cors'
|
33
|
+
|
34
|
+
<%- end -%>
|
35
|
+
<% if RUBY_ENGINE == 'ruby' -%>
|
36
|
+
group :development, :test do
|
37
|
+
# Call 'byebug' anywhere in the code to
|
38
|
+
# stop execution and get a debugger console
|
39
|
+
gem 'byebug', platforms: %i[mri mingw x64_mingw]
|
40
|
+
|
41
|
+
gem 'brakeman', require: false
|
42
|
+
gem 'bundler-audit', '~> 0.6.0', require: false
|
43
|
+
gem 'rubocop', '~> <%= Bankai::RUBOCOP_VERSION %>', require: false
|
44
|
+
|
45
|
+
<%- unless options[:skip_rspec] -%>
|
46
|
+
gem 'database_rewinder'
|
47
|
+
gem 'factory_bot_rails'
|
48
|
+
gem 'faker'
|
49
|
+
gem 'rspec', require: false
|
50
|
+
gem 'rspec-rails', require: false
|
51
|
+
gem 'shoulda', require: false
|
52
|
+
gem 'shoulda-matchers', require: false
|
53
|
+
gem 'simplecov', require: false
|
54
|
+
<%- end -%>
|
55
|
+
|
56
|
+
gem 'bankai'
|
57
|
+
end
|
58
|
+
|
59
|
+
group :development do
|
60
|
+
<% if depend_on_listen? -%>
|
61
|
+
gem 'listen', '>= 3.0.5', '< 3.2'
|
62
|
+
<% end -%>
|
63
|
+
<%- unless options.api? -%>
|
64
|
+
# Access an interactive console on exception pages or
|
65
|
+
# by calling 'console' anywhere in the code.
|
66
|
+
<%- if options.dev? || options.edge? -%>
|
67
|
+
gem 'web-console', github: 'rails/web-console'
|
68
|
+
<%- else -%>
|
69
|
+
gem 'web-console', '>= 3.3.0'
|
70
|
+
<%- end -%>
|
71
|
+
<%- end -%>
|
72
|
+
<% if spring_install? -%>
|
73
|
+
# Spring speeds up development by keeping your application running in
|
74
|
+
# the background. Read more: https://github.com/rails/spring
|
75
|
+
gem 'spring'
|
76
|
+
<% if depend_on_listen? -%>
|
77
|
+
gem 'spring-watcher-listen', '~> 2.0.0'
|
78
|
+
<% end -%>
|
79
|
+
<% end -%>
|
80
|
+
|
81
|
+
<% unless options[:skip_capistrano] -%>
|
82
|
+
gem 'capistrano', '<%= Bankai::CAPISTRANO_VERSION %>'
|
83
|
+
gem 'capistrano-bundler'
|
84
|
+
gem 'capistrano-rails'
|
85
|
+
# gem 'capistrano-sidekiq'
|
86
|
+
# gem 'capistrano-passenger'
|
87
|
+
<% end -%>
|
88
|
+
|
89
|
+
gem 'annotate', require: false
|
90
|
+
gem 'bullet'
|
91
|
+
gem 'dotenv-rails'
|
92
|
+
gem 'letter_opener'
|
93
|
+
gem 'overcommit', require: false
|
94
|
+
gem 'pry-rails'
|
95
|
+
gem 'rack-mini-profiler', require: false
|
96
|
+
end
|
97
|
+
|
98
|
+
<%- if depends_on_system_test? -%>
|
99
|
+
group :test do
|
100
|
+
# Adds support for Capybara system testing and selenium driver
|
101
|
+
gem 'capybara', '>= 2.15'
|
102
|
+
gem 'selenium-webdriver'
|
103
|
+
# Easy installation and use of chromedriver to run system tests with Chrome
|
104
|
+
gem 'chromedriver-helper'
|
105
|
+
end
|
106
|
+
<%- end -%>
|
107
|
+
<% end -%>
|
108
|
+
|
109
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
110
|
+
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
|
@@ -0,0 +1,233 @@
|
|
1
|
+
<%= app_name.humanize %>
|
2
|
+
===
|
3
|
+
|
4
|
+
## 系統需求
|
5
|
+
|
6
|
+
* Ruby <%= RUBY_VERSION %>
|
7
|
+
<%- case options[:database] -%>
|
8
|
+
<%- when 'postgresql' then -%>* PostgreSQL 9.6+
|
9
|
+
<%- when 'mysql' then -%>* MySQL 5.7+
|
10
|
+
<%- end -%>
|
11
|
+
* Node.js 8.0 (以上)
|
12
|
+
|
13
|
+
## 環境設定
|
14
|
+
|
15
|
+
以下的設定皆以 macOS 為主。
|
16
|
+
|
17
|
+
### Homebrew
|
18
|
+
|
19
|
+
在 macOS 需要有 [Homebrew](https://brew.sh/index_zh-tw) 來輔助安裝環境。
|
20
|
+
|
21
|
+
```bash
|
22
|
+
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
23
|
+
```
|
24
|
+
|
25
|
+
執行完畢後可以透過 `brew doctor` 確認是否可用。
|
26
|
+
|
27
|
+
### Ruby
|
28
|
+
|
29
|
+
為了配合多個版本的環境,建議使用 `rbenv` 或者 `rvm` 來管理 Ruby 環境。
|
30
|
+
|
31
|
+
```bash
|
32
|
+
# 選用 rbenv
|
33
|
+
brew install rbenv
|
34
|
+
|
35
|
+
# 選用 rvm
|
36
|
+
brew install rvm
|
37
|
+
```
|
38
|
+
|
39
|
+
完成後請參考終端機顯示的訊息設定 `.bashrc` 或者其他 Shell 設定檔。
|
40
|
+
|
41
|
+
```bash
|
42
|
+
# 選用 rbenv
|
43
|
+
rbenv install <%= RUBY_VERSION %>
|
44
|
+
|
45
|
+
# 選用 rvm
|
46
|
+
rvm install <%= RUBY_VERSION %>
|
47
|
+
```
|
48
|
+
|
49
|
+
完成後需要先將 Bundler 安裝到新安裝的 Ruby 環境中(rvm 可能會先預裝完畢)
|
50
|
+
|
51
|
+
```bash
|
52
|
+
# 先確認是否在正確的 Ruby 版本執行
|
53
|
+
ruby -v
|
54
|
+
# => ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin17]
|
55
|
+
|
56
|
+
gem install bundler
|
57
|
+
```
|
58
|
+
<%- case options[:database] -%>
|
59
|
+
<%- when 'postgresql' -%>
|
60
|
+
### PostgreSQL
|
61
|
+
|
62
|
+
請注意不要直接輸入 `postgresql` 否則會安裝到最新版的 PostgreSQL
|
63
|
+
|
64
|
+
```bash
|
65
|
+
# 安裝
|
66
|
+
brew install postgresql@9.6
|
67
|
+
|
68
|
+
# 啟動伺服器
|
69
|
+
brew services start postgresql@9.6
|
70
|
+
```
|
71
|
+
|
72
|
+
<%- when 'mysql' -%>
|
73
|
+
### MySQL
|
74
|
+
|
75
|
+
請注意不要直接輸入 `mysql` 否則會安裝到最新版的 MySQL
|
76
|
+
|
77
|
+
```bash
|
78
|
+
# 安裝
|
79
|
+
brew install mysql@5.7
|
80
|
+
|
81
|
+
# 啟動伺服器
|
82
|
+
brew services start mysql@5.7
|
83
|
+
```
|
84
|
+
|
85
|
+
啟動之前請參考終端機顯示的安裝訊息來初始化 MySQL 資料庫
|
86
|
+
|
87
|
+
<%- end -%>
|
88
|
+
### Node.js
|
89
|
+
|
90
|
+
Rails 需要 JavaScript Runtime 一般會使用 Node.js。
|
91
|
+
|
92
|
+
```bash
|
93
|
+
brew install node
|
94
|
+
```
|
95
|
+
|
96
|
+
<%- if options[:webpack] -%>
|
97
|
+
Webpacker 使用 Yarn 管理安裝的 JavaScript 套件,我們還需要將 Yarn 安裝進來。
|
98
|
+
|
99
|
+
```bash
|
100
|
+
brew install yarn
|
101
|
+
```
|
102
|
+
|
103
|
+
<%- end -%>
|
104
|
+
### Rails
|
105
|
+
|
106
|
+
請先透過 git 將專案下載到本地端。
|
107
|
+
|
108
|
+
```bash
|
109
|
+
# 切換到專案目錄
|
110
|
+
cd <%= app_name %>
|
111
|
+
|
112
|
+
# 安裝 Rails 所需套件
|
113
|
+
bundle install
|
114
|
+
|
115
|
+
# 設定 git hook
|
116
|
+
bundle exec overcommit --install
|
117
|
+
```
|
118
|
+
|
119
|
+
Overcommit 會做以下檢查:
|
120
|
+
|
121
|
+
1. commit 前:使用 rubocop 檢查語法
|
122
|
+
2. push 前:使用 brakeman 檢查安全性問題
|
123
|
+
|
124
|
+
```bash
|
125
|
+
# 設定資料庫
|
126
|
+
bundle exec rake db:create
|
127
|
+
|
128
|
+
# 更新資料庫到最新版
|
129
|
+
bundle exec rake db:migrate
|
130
|
+
```
|
131
|
+
|
132
|
+
<%- if options[:database] == 'mysql' -%>
|
133
|
+
#### 執行 bundle install 時 mysql2 gem 安裝失敗
|
134
|
+
|
135
|
+
這可能是因為我們指定了 MySQL 版本,但是作業系統裡面並不知道有 MySQL 的存在,造成自動安裝失敗。
|
136
|
+
我們可以透過以下指令手動安裝:
|
137
|
+
|
138
|
+
```
|
139
|
+
# 0.5.2 是目前的版本,之後有更新情參考錯誤訊息指示的版本
|
140
|
+
gem install mysql2 -v 0.5.2 -- --with-mysql-config=/usr/local/opt/mysql@5.7/bin/mysql_config
|
141
|
+
```
|
142
|
+
|
143
|
+
<%- end -%>
|
144
|
+
## 執行專案
|
145
|
+
|
146
|
+
### Rails 伺服器
|
147
|
+
|
148
|
+
```bash
|
149
|
+
# 這是 rails server 的縮寫
|
150
|
+
rails s
|
151
|
+
```
|
152
|
+
|
153
|
+
開啟後預設可以透過 `http://localhost:3000` 看到網站
|
154
|
+
|
155
|
+
#### PendingMigration 錯誤
|
156
|
+
|
157
|
+
這是因為最新版本的資料庫已經被更改,但是本機的資料庫還沒有被更新。
|
158
|
+
|
159
|
+
```bash
|
160
|
+
bundle exec rake db:migrate
|
161
|
+
```
|
162
|
+
|
163
|
+
執行 `db:migrate` 指令更新資料庫即可。
|
164
|
+
|
165
|
+
<%- if options[:webpack] -%>
|
166
|
+
### Webpack 伺服器
|
167
|
+
|
168
|
+
因為專案使用了 Webpacker 所以需要開啟 Webpack 伺服器來轉換 JavaScript
|
169
|
+
|
170
|
+
```bash
|
171
|
+
./bin/webpack-dev-server
|
172
|
+
```
|
173
|
+
|
174
|
+
和 Rails 伺服器同時打開後,就可以看到正常的網站畫面
|
175
|
+
|
176
|
+
<%- end -%>
|
177
|
+
<%- unless options[:skip_rspec] -%>
|
178
|
+
### 運行測試
|
179
|
+
|
180
|
+
這個專案使用 RSpec 進行測試,可以透過執行以下指令運行
|
181
|
+
|
182
|
+
```bash
|
183
|
+
bundle exec rspec
|
184
|
+
```
|
185
|
+
|
186
|
+
<%- end -%>
|
187
|
+
### Ruby 語法檢查
|
188
|
+
|
189
|
+
這個功能會在 commit 前自動執行,必要時可以手動進行
|
190
|
+
|
191
|
+
```bash
|
192
|
+
bundle exec rubocop
|
193
|
+
```
|
194
|
+
|
195
|
+
### Ruby 安全性檢查
|
196
|
+
|
197
|
+
這個功能會在 push 前自動執行,必要時可以手動進行
|
198
|
+
|
199
|
+
```bash
|
200
|
+
bundle exec brakeman
|
201
|
+
```
|
202
|
+
|
203
|
+
### 建立 .env 檔案
|
204
|
+
|
205
|
+
建立 `.env` 檔案,並依據 local 開發環境需求修改設定內容。
|
206
|
+
|
207
|
+
```bash
|
208
|
+
cp .env.example .env
|
209
|
+
```
|
210
|
+
|
211
|
+
<%- unless options[:skip_capistrano] -%>
|
212
|
+
## 部署
|
213
|
+
|
214
|
+
這個專案使用 Capistrano 進行部署,請先確定有權限透過 `deployer` 帳號 SSH 到伺服器上。
|
215
|
+
|
216
|
+
```bash
|
217
|
+
cap [ENV] deploy
|
218
|
+
```
|
219
|
+
|
220
|
+
假設要部署到測試(Staging)環境,請使用以下指令
|
221
|
+
|
222
|
+
```bash
|
223
|
+
cap staging deploy
|
224
|
+
```
|
225
|
+
|
226
|
+
如果是正式環境,則使用以下指令
|
227
|
+
|
228
|
+
```bash
|
229
|
+
cap production deploy
|
230
|
+
```
|
231
|
+
|
232
|
+
過程中會詢問要使用的 Git Branch,預設為 master branch,如果需要測試某個 Git Branch 請先將他上傳到 GitHub 上,並且和團隊成員確認後手動輸入 branch 再進行部署跟測試。
|
233
|
+
<%- end -%>
|