gpt4 book ai didi

ruby-on-rails - 如何知道 Spork 是否正在运行

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:13 26 4
gpt4 key购买 nike

我正在尝试使用 spork 加速 Rails 2.3.8 应用程序中的“rspecing”。当我在项目的根目录中运行 spork 时,我得到:

(...stuff...)
No server is running
Running specs locally:
Spork is ready and listening on 8989!

然后,如果我运行规范,消息

 No server is running 
Running specs locally

如果我在没有 Spork 的情况下运行它们,则不会出现,但是规范启动速度与没有 Spork 一样慢。同样在 Spork 的终端中没有进一步的输出出现。

我的问题是,spork 真的在运行吗?如果是这样,规范是否在那里运行?最后,如果两者的答案都是正确的,我怎样才能加快我的测试?

这里是涉及到的配置文件:

规范/规范.opts

  --colour
--format progress
--loadby mtime
--reverse
--drb

规范/规范助手

require 'rubygems'
require 'bundler/setup'
require 'spork'


Spork.prefork do

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
require 'spec/autorun'
require 'spec/rails'

Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}

Spec::Runner.configure do |config|
end


end

Spork.each_run do

end

并且,为了有一个完整的问题,这里是用“时间”测量的时间:

使用Spork:

real    0m39.524s
user 0m5.012s
sys 0m0.912s

没有 Spork:

real    0m39.576s
user 0m18.537s
sys 0m2.400s

运行时——我得到诊断

 - Spork Diagnosis -
-- Summary --
config/boot.rb
config/initializers/inflections.rb
config/initializers/mime_types.rb
config/initializers/new_rails_defaults.rb
config/initializers/site_keys.rb
config/preinitializer.rb
spec/spec_helper.rb

然后,对于

 --- config/initializers/inflections.rb ---
--- config/initializers/mime_types.rb ---
--- config/initializers/new_rails_defaults.rb ---
--- config/initializers/site_keys.rb ---

以下堆栈跟踪

 /var/lib/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:147:in `load'
/var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:622:in `load_application_initializers'
/var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:621:in `each'
/var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:621:in `load_application_initializers'
/var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:176:in `process'
/var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:113:in `send'
/var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:113:in `run_without_spork'
/var/lib/gems/1.8/gems/spork-0.8.4/lib/spork/app_framework/rails.rb:18:in `run'
config/environment.rb:15
spec/spec_helper.rb:14:in `require'
spec/spec_helper.rb:14
/var/lib/gems/1.8/gems/spork-0.8.4/bin/../lib/spork.rb:23:in `prefork'

规范/spec_helper.rb:6

最佳答案

我遇到了同样的问题,这就是我能够弄清楚的。

在 lib/tasks/rspec.rake 的第 50 行附近,您会发现以下行。

spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop

这导致 db:test:prepare 在您的规范之前运行,这反过来加载了环境,破坏了 spork 的全部目的。我注释掉了这一行并在其下方添加了以下内容。

spec_prereq = :noop

此更改应该会带来相当大的改进。在运行 db:migrate 之后,您必须手动运行 db:test:prepare。我有一个命令可以同时执行这两项操作。

我不知道您是否在使用 Bundler,但我发现通过升级到最新版本 (1.0.7) 可以进一步提高速度。 (Bundler 在 2.3.x 中加载 Rake 时设置加载路径)

由于 spork、rake 和 bundler 的开销,我仍然有大约 2.5 秒的延迟,我希望将来可以改进,也许当 spork 支持 rails 3 时。

关于ruby-on-rails - 如何知道 Spork 是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com