【问题标题】:Impossible to delete a flash无法删除闪存
【发布时间】:2016-06-01 20:34:10
【问题描述】:

我在迁移插件之前犯了一个错误,并写了

flash[:notice] = :label_presta_added

而不是

flash[:notice] = l(:label_presta_added)

我纠正了我的错误,但似乎我的 Redmine 插件破坏了我的 Redmine。即使我再次删除我的插件迁移,我仍然收到此错误:

    Started GET "/" for 127.0.0.1 at 2016-06-01 22:21:37 +0200
Processing by WelcomeController#index as HTML
  Current user: admin (id=1)
  Rendered welcome/index.html.erb within layouts/base (28.1ms)
Completed 500 Internal Server Error in 366ms (ActiveRecord: 116.0ms)

ActionView::Template::Error (undefined method `html_safe' for :label_presta_added:Symbol
Did you mean?  html_safe?):
     97:     <div id="sidebar">
     98:         <%= yield :sidebar %>
     99:         <%= view_layouts_base_sidebar_hook_response %>
    100:     </div>
    101: 
    102:     <div id="content">
    103:         <%= render_flash_messages %>
  app/helpers/application_helper.rb:312:in `block in render_flash_messages'
  app/helpers/application_helper.rb:311:in `render_flash_messages'
  app/views/layouts/base.html.erb:100:in `_app_views_layouts_base_html_erb__4104276684161420982_39604440'
  lib/redmine/sudo_mode.rb:63:in `sudo_mode'

有人可以帮帮我吗? 提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby plugins redmine


    【解决方案1】:

    这存储在您的会话中,因此通常更改会话密钥会使所有会话无效并丢弃所有旧会话数据。

    您也可以尝试和rescue 将其作为一次性交易清除。

    【讨论】:

    • 好的,更改会话密钥确实解决了我的问题。但是,我真的不明白为什么会出现这个问题......
    • 该值会在您的会话中持续存在,直到页面成功呈现。由于您不断收到异常,因此它永远无法完成。
    • 好的。但是现在当我改变 flash[:notice] 的值时,它不会改变。我是 Rails 的初学者(我来自 PHP),所以这意味着我每次更改代码时都必须更改会话令牌?无论如何谢谢:)
    • 不,值会改变如果请求可以完成。会话更新发生在请求结束时。只有当你真的把事情搞砸时才需要清理会话,就像你在这里一样。
    • 好的,我现在明白了。 Rails 真的与 PHP 不同!非常感谢,今晚我可以睡觉了。
    【解决方案2】:

    您是否重新启动了服务器?或者您可以使用flash[:notice] = nil 将其删除。

    【讨论】:

    • 首先我改为 flash[:notice] = 'test' 然后我删除了插件。每次更改后,我都做了:rake redmine:plugins:migrate RAILS_ENV=production/etc/init.d/apache2 restart
    • @djcaesar9114 您是否在实时站点上进行这些更改?如果是这样,你正在玩一个危险的游戏。无论如何,您使用的是什么 Rails 服务器?乘客、独角兽、彪马、Webrick 等。我的意思是重新启动该服务。应该这样做。
    • 我不知道您所说的“实时站点”是什么意思。我正在开发一个 Redmine 插件,我的电脑上有一个 Redmine,我正在使用它来测试插件。我重新启动了乘客,但我仍然收到同样的错误:(
    【解决方案3】:

    看起来它会引发 html_safe 错误。你能看到渲染 flash 的方法是否使用了 html_safe 吗?它看起来像是从那里来的。

    不确定,可能是在黑暗中拍摄。 但是阅读这些并尝试可能是:

    actionview::template::error(undefined method 'html_safe' for nil:NilClass)

    http://www.redmine.org/issues/8477

    【讨论】:

    • 实际上这个 html_safe 错误来自于它寻找一个我不再拥有的值 (:label_presta_added)。我不明白的是 Rails 在哪里找到这个值,而我从我的代码中删除了它。显然,会话中存储了一些数据。
    • 是的,我明白了。认为重新启动服务器应该已经清除了会话,所以我认为您可能必须从该方法中删除 html_safe 并重试。但显然会话从未被清除。很好,你的问题解决了。 :)
    猜你喜欢
    • 2015-04-14
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多