- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在测试 Rails 任务时遇到了一个奇怪的问题。当我为我的 rake 任务运行所有测试时,它们会被多次调用,但是当我只运行一个测试文件时,一切都会突然正常工作。这是一个示例代码:
抽取任务
namespace :after_party do
desc 'Deployment task: create_users_on_another_app'
task create_users_on_another_app: :environment do
...some code
AppClient.post(some_url, some_payload, some_header)
...some more code
AfterParty::TaskRecord.create version: '20190620160110'
end
end
end
rspec 测试
describe 'create_users_on_another_app' do
before do
allow(AppClient).to receive(:post).and_return(some_response)
end
it "creates users" do
expect(AppClient).to receive(:post).with(some_url, some_data, some_header)
puts "JUST BEFORE INVOKING THE TASK: "
Rake::Task['after_party:create_users_on_another_app'].invoke
puts "DONE"
end
end
在控制台输出中我可以看到类似这样的内容:
> JUST BEFORE INVOKING THE TASK:
> Running deploy task 'create_users_on_another_app'
> Running deploy task 'create_users_on_another_app'
> DONE
所以这个任务被调用了两次。
我不知道为什么会这样,而且我 100% 确定我不会在我的代码中调用它两次。我怀疑是我缺少的 rspec 的某些 rake 配置,还是我正在使用的 rake 任务的 gem - after_party
。
我很难调试它,尝试使用 show-stack
和 binding.pry
而我在导致问题的 rake 任务中但没有'设法查看在什么时候触发了额外的 rake 任务。
有人以前见过这样的问题吗?
编辑:在 it
block 中运行 show-stack 命令的堆栈跟踪,就在 invoke
rake 任务之前:
=> #0 <main>
#1 [block] block in run <Byebug::PryProcessor#run(&_block)>
#2 [method] run <Byebug::PryProcessor#run(&_block)>
#3 [method] resume_pry <Byebug::PryProcessor#resume_pry()>
#4 [method] at_line <Byebug::PryProcessor#at_line()>
#5 [method] at_line <Byebug::Context#at_line()>
#6 [block] block (2 levels) in <top (required)>
#7 [block] block in run <RSpec::Core::Example#run(example_group_instance, reporter)>
#8 [block] block in with_around_and_singleton_context_hooks <RSpec::Core::Example#with_around_and_singleton_context_hooks()>
#9 [block] block in with_around_example_hooks <RSpec::Core::Example#with_around_example_hooks()>
#10 [block] block in run <RSpec::Core::Hooks::HookCollections#run(position, scope, example_or_group)>
#11 [block] block in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#12 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#13 [block] block (2 levels) in <module:MinitestLifecycleAdapter>
#14 [method] instance_exec <RSpec::Core::Example#instance_exec(*args, &block)>
#15 [method] execute_with <RSpec::Core::Hooks::AroundHook#execute_with(example, procsy)>
#16 [block] block (2 levels) in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#17 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#18 [block] block (3 levels) in <top (required)>
#19 [method] perform_enqueued_jobs <ActiveJob::TestHelper#perform_enqueued_jobs(?, ?)>
#20 [block] block (2 levels) in <top (required)>
#21 [method] instance_exec <RSpec::Core::Example#instance_exec(*args, &block)>
#22 [method] execute_with <RSpec::Core::Hooks::AroundHook#execute_with(example, procsy)>
#23 [block] block (2 levels) in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#24 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#25 [block] block in run <RSpec::Retry#run()>
#26 [method] run <RSpec::Retry#run()>
#27 [method] run_with_retry <RSpec::Core::Example::Procsy#run_with_retry(opts=?)>
#28 [block] block (2 levels) in setup <self.setup(UNKNOWN) (undefined method)>
#29 [method] instance_exec <RSpec::Core::Example#instance_exec(*args, &block)>
#30 [method] execute_with <RSpec::Core::Hooks::AroundHook#execute_with(example, procsy)>
#31 [block] block (2 levels) in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#32 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#33 [method] run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#34 [method] run <RSpec::Core::Hooks::HookCollections#run(position, scope, example_or_group)>
#35 [method] with_around_example_hooks <RSpec::Core::Example#with_around_example_hooks()>
#36 [method] with_around_and_singleton_context_hooks <RSpec::Core::Example#with_around_and_singleton_context_hooks()>
#37 [method] run <RSpec::Core::Example#run(example_group_instance, reporter)>
#38 [block] block in run_examples <RSpec::Core::ExampleGroup.run_examples(reporter)>
#39 [method] run_examples <RSpec::Core::ExampleGroup.run_examples(reporter)>
#40 [method] run <RSpec::Core::ExampleGroup.run(reporter=?)>
#41 [block] block (3 levels) in run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#42 [block] block (2 levels) in run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#43 [method] with_suite_hooks <RSpec::Core::Configuration#with_suite_hooks()>
#44 [block] block in run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#45 [method] report <RSpec::Core::Reporter#report(expected_example_count)>
#46 [method] run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#47 [method] run <RSpec::Core::Runner#run(err, out)>
#48 [method] run <RSpec::Core::Runner.run(args, err=?, out=?)>
#49 [method] invoke <RSpec::Core::Runner.invoke()>
#50 [top] <top (required)>
#51 [eval] <main>
#52 [main] <main>
还从 rake 任务本身附加堆栈跟踪:
=> #0 <main>
#1 [block] block in run <Byebug::PryProcessor#run(&_block)>
#2 [method] run <Byebug::PryProcessor#run(&_block)>
#3 [method] resume_pry <Byebug::PryProcessor#resume_pry()>
#4 [method] at_line <Byebug::PryProcessor#at_line()>
#5 [method] at_line <Byebug::Context#at_line()>
#6 [block] block (2 levels) in <top (required)>
#7 [block] block in execute <Rake::Task#execute_without_bugsnag(args=?)>
#8 [method] execute <Rake::Task#execute_without_bugsnag(args=?)>
#9 [method] execute_with_bugsnag <Rake::Task#execute_with_bugsnag(args=?)>
#10 [block] block in invoke_with_call_chain <Rake::Task#invoke_with_call_chain(task_args, invocation_chain)>
#11 [method] mon_synchronize <MonitorMixin#mon_synchronize()>
#12 [method] invoke_with_call_chain <Rake::Task#invoke_with_call_chain(task_args, invocation_chain)>
#13 [method] invoke <Rake::Task#invoke(*args)>
#14 [block] block (2 levels) in <top (required)>
#15 [block] block in run <RSpec::Core::Example#run(example_group_instance, reporter)>
#16 [block] block in with_around_and_singleton_context_hooks <RSpec::Core::Example#with_around_and_singleton_context_hooks()>
#17 [block] block in with_around_example_hooks <RSpec::Core::Example#with_around_example_hooks()>
#18 [block] block in run <RSpec::Core::Hooks::HookCollections#run(position, scope, example_or_group)>
#19 [block] block in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#20 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#21 [block] block (2 levels) in <module:MinitestLifecycleAdapter>
#22 [method] instance_exec <RSpec::Core::Example#instance_exec(*args, &block)>
#23 [method] execute_with <RSpec::Core::Hooks::AroundHook#execute_with(example, procsy)>
#24 [block] block (2 levels) in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#25 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#26 [block] block (3 levels) in <top (required)>
#27 [method] perform_enqueued_jobs <ActiveJob::TestHelper#perform_enqueued_jobs(?, ?)>
#28 [block] block (2 levels) in <top (required)>
#29 [method] instance_exec <RSpec::Core::Example#instance_exec(*args, &block)>
#30 [method] execute_with <RSpec::Core::Hooks::AroundHook#execute_with(example, procsy)>
#31 [block] block (2 levels) in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#32 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#33 [block] block in run <RSpec::Retry#run()>
#34 [method] run <RSpec::Retry#run()>
#35 [method] run_with_retry <RSpec::Core::Example::Procsy#run_with_retry(opts=?)>
#36 [block] block (2 levels) in setup <self.setup(UNKNOWN) (undefined method)>
#37 [method] instance_exec <RSpec::Core::Example#instance_exec(*args, &block)>
#38 [method] execute_with <RSpec::Core::Hooks::AroundHook#execute_with(example, procsy)>
#39 [block] block (2 levels) in run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#40 [method] call <RSpec::Core::Example::Procsy#call(*args, &block)>
#41 [method] run_around_example_hooks_for <RSpec::Core::Hooks::HookCollections#run_around_example_hooks_for(example)>
#42 [method] run <RSpec::Core::Hooks::HookCollections#run(position, scope, example_or_group)>
#43 [method] with_around_example_hooks <RSpec::Core::Example#with_around_example_hooks()>
#44 [method] with_around_and_singleton_context_hooks <RSpec::Core::Example#with_around_and_singleton_context_hooks()>
#45 [method] run <RSpec::Core::Example#run(example_group_instance, reporter)>
#46 [block] block in run_examples <RSpec::Core::ExampleGroup.run_examples(reporter)>
#47 [method] run_examples <RSpec::Core::ExampleGroup.run_examples(reporter)>
#48 [method] run <RSpec::Core::ExampleGroup.run(reporter=?)>
#49 [block] block (3 levels) in run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#50 [block] block (2 levels) in run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#51 [method] with_suite_hooks <RSpec::Core::Configuration#with_suite_hooks()>
#52 [block] block in run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#53 [method] report <RSpec::Core::Reporter#report(expected_example_count)>
#54 [method] run_specs <RSpec::Core::Runner#run_specs(example_groups)>
#55 [method] run <RSpec::Core::Runner#run(err, out)>
#56 [method] run <RSpec::Core::Runner.run(args, err=?, out=?)>
#57 [method] invoke <RSpec::Core::Runner.invoke()>
#58 [top] <top (required)>
#59 [eval] <main>
#60 [main] <main>
编辑 2:添加了更多信息
我已经检查过如果我像那样放置 binding.pry
会发生什么(也在 rake 任务中)
it "creates users" do
expect(AppClient).to receive(:post).with(some_url, some_data, some_header)
binding.pry # no1 before rake task invokation
Rake::Task['after_party:create_users_on_another_app'].invoke
binding.pry # no3 after rake task invokation
puts "DONE"
end
派对抽成任务代码下方
namespace :after_party do
desc 'Deployment task: create_users_on_another_app'
task create_users_on_another_app: :environment do
...some code
binding.pry # no2 inside the task
AppClient.post(some_url, some_payload, some_header)
...some more code
AfterParty::TaskRecord.create version: '20190620160110'
end
end
end
输出是代码执行在 no1
停止,然后我们进入 rake 任务并在 no2
停止,之后任务再次运行(因此再次停止在 no2
) 之后它停在 no3
最佳答案
我有同样的问题,但通过检查任务如何加载到明显无关的任务规范文件中解决了这个问题。在另一个规范文件中,那里的测试任务被加载为
Rails.application.load_tasks
它实际上加载了所有任务。所以在我正在处理的规范文件中,我当然必须要求我想要测试的任务;这样只有在我加载整个测试套件时才会第二次加载此任务。
将这一行替换为
Rake.application.rake_require 'tasks/your_task_file'
并使用 .execute
而不是 .invoke
更改任务调用就达到了目的。 .execute
不会加载 :environment
,所以如果您需要它,您可能想找到一种方法来执行此操作
关于ruby-on-rails - rake 任务被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61487190/
我已经为精炼厂安装了一个博客引擎,它运行良好。 现在我生成了一些表字段更改的迁移(当然不是精炼厂或博客表),但我收到一个错误: == CreateBlogStructure: migrating ==
设置如下: 新建 Rails 应用程序,然后将此 test_rake.rake 放入 lib/tasks 中: task :testclass do HelloClass.hello end` 将
我觉得调用 bundle exec rake 或 bundle exec make 很奇怪:为什么不呢 bundle exec bundle exec rake 然后呢? 虽然我应该能够从 Rakef
我试图更好地了解 rake作品。我在 rake 网站上查看过它是如何工作的,但没有明确解释 rake搜索 Rakefiles 以及它在解决依赖项时所经历的步骤。有人能解释一下如何rake作品? 最佳答
我有一个构建系统,它由几个带有项目的子目录组成,其中每个子目录都有一个单独的 rakiefile(或几个 rakefiles)。没有顶级目录有一个 rakefile,它遍历所有子目录并通过以下方式调用
我想运行一个要求用户输入的 Rake 任务。 我知道我可以在命令行上提供输入,但我想询问用户是否确定他们想要继续执行特定操作,以防他们错误输入所提供的值之一到 Rake 任务。 最佳答案 像这样的东西
我在 this question 中遇到了相同的 heroku rake 问题(据我所知已解决) . 当我尝试修复(包括 require 'rake/dsl_definition' 上面的 requi
如何编写将捆绑安装然后 rake db:migrate 然后 rake db:seed 的 rake 任务。 namespace 'install' do 'bundle install' '
这可能是一种“插上电源了吗?”问题,但是在获得 Ubuntu 11.04 的默认 Rackspace 镜像之后。运行命令(以 root 身份) apt-get 安装 rake 因错误而失败 Readi
花了一些时间没有在 Rails 上编程,现在我“回来了”,事情出了问题。 我安装了 ruby 1.9.2-p0 并坚持使用 rails 3.0.1.Updated 所有 gems 和 bundle
我在让 dotCover 在 Albacore 中工作时遇到一些问题 exec使用相对路径的任务。 @xUnitRunnerPath = Pathname.new('../../Tools/xUnit
我正在尝试执行“rake db:migrate”,它给了我这个错误。 Andy:AcademyAir Andy$ rake db:migrate /Users/Andy/.rvm/gems/ruby-
我的 .bashrc 中有以下命令: alias mfigpdf='for FIG in *.fig; do fig2dev -L pdftex "$FIG" "${FIG%.*}.pdftex";
我希望能够发出命令 rake test:qunit并运行我们的 qunit 测试。这可能吗?可以在不打开浏览器窗口的情况下完成吗? 最佳答案 您可以将 PhantomJS 集成到 rake 中。 Ph
我不是一个 ruby 人,我正在使用 Ember.js 开发一个项目,我正在使用 Rake 管道来编译我的脚本。 # AssetFile $: true concat 'templates.
嗨,我正在做一些编码并试图 rake routes 这个错误信息出来了,我不知道该怎么办 rake aborted! Gem::LoadError: You have already activate
你好,我正在开发一个 rails 应用程序,每次我尝试运行任何 rake 命令时,我都会收到此错误 /usr/local/bin/rake:22:in load': cannot load such
我打电话 bundle exec cap staging demo:foo . demo:foo Cap 任务调用 Rake 任务,打印出 Rails.env . 但是...... Rails 任务正
相关的 travis-ci 构建位于: http://travis-ci.org/#!/NZOI/nztrain/builds/2046207 此时 db:migrate 或 db:test:prep
为什么我收到这个 Rake 错误: $ rake --version /Volumes/Data/sampablokuper/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/
我是一名优秀的程序员,十分优秀!