gpt4 book ai didi

ruby-on-rails - 为什么文件存在时偶尔会出现 Missing Partial 错误?

转载 作者:行者123 更新时间:2023-12-03 11:59:42 25 4
gpt4 key购买 nike

在运行 Cucumber 测试时,它有时会间歇性地失败。错误是:

*** ActionView::Template::Error Exception: Missing partial items/_fields with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml]}. Searched in:
* "/my/path/to/application/app/views"
* "/my/path/to/rvm/gems/ruby-2.1.5/gems/kaminari-0.16.3/app/views"
* "/my/path/to/rvm/gems/ruby-2.1.5/gems/devise-3.5.4/app/views"

是的,部分文件确实存在于 /my/path/to/application/app/views/items/_fields.html.haml

更重要的是,有时测试会通过,有时会失败。我在 Red Hat 5 机器上运行。

所以为了调试这个,我决定加入 begin/rescue .
.fields
- begin
= render partial: 'items/fields', locals: {f: f}
- rescue Exception => e
= byebug

- if f.can_modify?(:object_a)
= render partial: 'layouts/object_a_field', locals: {f: f, field: :object_a}
- else
.field#object_a
= render partial: 'layouts/attribute', locals: {label: 'Object A', value: f.object.object_a_id ? f.object.object_a_number : 'Not Assigned'}

.field#name
- if f.can_modify?(:name)
= f.label :name
= f.text_field :name, {class: 'inputbox large_field', readonly: f.cannot_modify?(:name)}
.smltxt (short description of the item)
- else
= render partial: 'layouts/attribute', object: f.object, locals: {field: :name}

对于那些好奇部分 items/fields 中的内容的人:
.field
- if f.can_modify?(:name)
= f.label :name, 'Item'
= f.text_field :name, {class: 'inputbox uppercase', maxlength: 16, readonly: !f.object.identifier.new_record?}
.smltxt (character identifier)
- else
= render partial: 'layouts/attribute', object: f.object, locals: {field: :name, label: 'Item'}

当它通过时,我显然不会撞到 byebug,但当它失败时,我会!这让我可以在 Rails 控制台类型的环境中使用它。

所以我决定运行那个特定的命令:
(byebug) render partial: 'items/fields', locals: {f: f}

我得到:
*** ActionView::Template::Error Exception: Missing partial items/_fields with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml]}. Searched in:
* "/my/path/to/application/app/views"
* "/my/path/to/rvm/gems/ruby-2.1.5/gems/kaminari-0.16.3/app/views"
* "/my/path/to/rvm/gems/ruby-2.1.5/gems/devise-3.5.4/app/views"

所以我想我会删除本地人,看看是否有任何改变:
(byebug) render partial: 'items/fields'

我得到:
*** ActionView::Template::Error Exception: undefined local variable or method `f' for #<#<Class:0x0000002a907610>:0x00000027beae48>

所以很明显它现在神奇地找到了部分,它知道它缺少一个局部变量 f .

更新 1

为了清楚起见,我添加了调用上述部分 View 的其余部分。

为了排除故障,我还取了 items/_fields.html.haml的内容。并将它放在我有 render partial: 'items/fields', locals: {f: f} 的位置...然后测试通过了,这意味着文件中的其他部分也没有问题。所以它似乎与文件的内容无关。

更新 2

似乎通过将@javascript 标签添加到我们的第一个 Cucumber 功能通常可以解决此问题。不知何故,在其他测试之前加载浏览器,提高了它通过的机会。对我来说没有意义,也许其他人对此有想法?

更新 3

今天发现该错误与 Cucumber 完全无关。在生产中也发现了同样的错误。 Web 界面显示缺少部分错误,但文件确实存在。使用 touch tmp/restart.txt 重新启动乘客服务器后然后错误消失了。所以还是很断断续续的。

更新 4

我添加了似乎随机丢失的部分内容。

我将如何去发现为什么 Rails 找不到实际存在的部分?

最佳答案

我有一个类似的问题,但 Handlebars 有另一个 gem 。这通常是因为缓存。

试试你的 cucumber 设置设置

ActionView::Base.cache_template_loading = false

如果以上方法对你有用 有一个将在生产中发生的缓存问题。

这里有一个未在开发模式下启用缓存的未解决问题: https://github.com/indirect/haml-rails/search?utf8=%E2%9C%93&q=cache_template_loading

关于ruby-on-rails - 为什么文件存在时偶尔会出现 Missing Partial 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35132559/

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