zeus是rails的preloader,它可以讓rails指令跑的更快。
時間寶貴,不解釋。
不建議使用bundle來裝它,因為透過bundle exec
反而讓zeus啟動變慢。另外zeus本身就是設計不相依於rails專案,可以讓不同的專案用同一套zeus,所以可以直接下gem install zeus
來安裝它。
zeus start
,這時候會顯示zeus啟動的狀態與可以使用的指令。zeus rails s
。首先第一個遇到的問題是無法使用 `zeus test` ,它會出現 `undefined method `configure' for RSpec:Module (NoMethodError)`
/Users/wangkaito/workspace/rails/dev/ukik-gamma2/spec/spec_helper.rb:19:in `': undefined method `configure' for RSpec:Module (NoMethodError)
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `block in require'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:240:in `load_dependency'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
from /Users/wangkaito/workspace/rails/dev/ukik-gamma2/spec/rails_helper.rb:6:in `'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `block in require'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:240:in `load_dependency'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
from /Users/wangkaito/.rvm/gems/ruby-2.2.3/gems/zeus-0.15.4/lib/zeus/rails.rb:196:in `test_helper'
...
查了一下網路的資料發現因為zeus在啟動時,不會像rails一樣一次把所有用到的gem或是library都載入,所以如果有任何沒有require就使用的library的class或module就會出錯。上面的問題是出在 spec/rails_helper.rb 中的第6行:
require 'spec_helper'
require 'rspec/rails'
spec_helper裡有用到RSpec的module,但正真載入rspec的地方是在require 'rspec/rails'
,因此就出問題了。解法也很簡單,只要將上面兩行對掉就可以了。
require 'rspec/rails'
require 'spec_helper'
其實rails預設有一個preloader叫做Spring,也是做類似的事。如果有興趣的話,可以看這篇的比較:Fast Tests: Comparing Zeus With Spring on Rails 4.1 and RSpec 3