你必須很努力

在 Rails 裡的 spring 指令是做什麼的?

2019/09/14
字數統計: 648閱讀時間: 2 min

自 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 crails -T,第二次以上執行速度?

可參考 Spring 的官方文件 或以下操作步驟:

1. 確認 Gemfile 有安裝 springbundle

2. 檢查專案資料夾底下是否有 bin/railsbin/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 ,會發現第二次起,進入變快了!


參考:

  1. Ruby on Rails 4.1 發佈記
  2. Spring README

原文連結:https://riverye.com/2019/09/14/在-Rails-裡的-spring-指令是做什麼的?/

發表日期:2019-09-14

更新日期:2020-07-12

CATALOG
  1. 1. 自 Rails 4.1 以後,採用 Spring 來預載應用程式
  2. 2. 保持應用程式在背景執行,如此一來在執行 Rails 命令時:如跑測試、rake、migrate 時,不用每次都重啟 Rails 應用程式,加速你的開發流程
  3. 3. 如何加速 rails c、rails -T,第二次以上執行速度?
    1. 3.1. 1. 確認 Gemfile 有安裝 spring 並 bundle 過
    2. 3.2. 2. 檢查專案資料夾底下是否有 bin/rails 和 bin/rake 這兩個檔案,且資訊會如下:
    3. 3.3. 3. 如果有缺檔案或部分內容的話,可在終端機輸入
    4. 3.4. 4. 將原本 rails c 進入的方式,改成
    5. 3.5. 5. 進入後再離開,接著再輸入一次 ./bin/rails c ,會發現第二次起,進入變快了!