自 Rails 4.1 以後,採用 Spring 來預載應用程式
保持應用程式在背景執行,如此一來在執行 Rails 命令時:如跑測試、rake、migrate 時,不用每次都重啟 Rails 應用程式,加速你的開發流程
特徵:
- 自動化,毋須特別啟動或停止背景程序
- 每次運行時會重新加載應用程序
- 修改 configs / initializers / gem 時,建議重啟server
相容性:
- Ruby 版本:MRI 2.4 之後
- Rails 版本:4.1 之後 (rails new 新專案時,預設安裝Spring)
打開 Rails 專案的 Gemfile,會發現預設如下:
1
2
3
4# Gemfile
group :development do
gem ‘spring’
end
直接在終端機輸入的話
1
2
3
4# $ 表示在終端機輸入, $ 本身不用跟著輸入喔
$ spring status
Spring is not running.
需先進入
1
$ rails console
再回終端機輸入
1
2
3
4$ spring status
Spring is running:
350 spring server | ivoting | started 1 hour ago
352 spring app | ivoting | started 1 hour ago | development mode
關閉指令
1
$ spring stop
開啟指令
1
$ spring server
若想知道 spring 還有哪些指令
1
2
3
4
5
6
7
8
9
10
11
12$ spring
Version: 2.1.0
Usage: spring COMMAND [ARGS]
Commands for Spring itself:
binstub Generate Spring based binstubs. Use --all to generate a binstub for all known commands. Use --remove to revert.
help Print available commands.
server Explicitly start a Spring server in the foreground
status Show current status.
stop Stop all Spring processes for this project.
Commands for your application:
rails Run a rails command. The following sub commands will use Spring: console, runner, generate, destroy, test.
rake Runs the rake command
很貼心地 show 出所有指令,能透過同樣技巧查詢 rails 指令有哪些喔~
如何加速 rails c
、rails -T
,第二次以上執行速度?
可參考 Spring 的官方文件 或以下操作步驟:
1. 確認 Gemfile 有安裝 spring
並 bundle
過
2. 檢查專案資料夾底下是否有 bin/rails
和 bin/rake
這兩個檔案,且資訊會如下:
1
2
3
4
5
6
7
8
9
10
11# 路徑: 專案資料夾底下的 /bin/rails
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'
1
2
3
4
5
6
7
8
9
10
11# 路徑: 專案資料夾底下的 /bin/rake
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
require_relative '../config/boot'
require 'rake'
Rake.application.run
3. 如果有缺檔案或部分內容的話,可在終端機輸入
1
2$ spring binstub
$ bundle exec spring binstub --all
會幫你檢查上述 2 個檔案是否有缺,並幫你補上所缺的部分,可用 Git 觀察被增加了什麼檔案和內容
4. 將原本 rails c
進入的方式,改成
1
$ ./bin/rails c
5. 進入後再離開,接著再輸入一次 ./bin/rails c
,會發現第二次起,進入變快了!
參考: