【问题标题】:Rails Controller errors: syntax error, unexpected keyword_end, expecting end-of-inputRails 控制器错误:语法错误、意外的keyword_end、期望输入结束
【发布时间】:2014-02-19 23:21:17
【问题描述】:

我正在 Rails 4 中构建应用程序并尝试运行服务器。我在第 1 行收到涉及应用程序控制器的错误。由于此错误,Localhost 将无法运行服务器:语法错误,意外关键字_end,预期输入结束。机架会话状态:ActionDispatch::Request::Session:0x1072f1ef0 尚未加载。这是我的应用程序控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper
end

对于另一个控制器,还有一个相同的应用程序帧错误。就像应用程序控制器一样,它的代码非常少,并且有正确数量的“结束”。在我的“所有帧”选项卡中,有许多涉及 ActiveSupport、ActionController 和许多其他错误的错误。太多了,无法一一列举。

有人知道导致这些错误的原因吗?提前致谢!

【问题讨论】:

  • 您是否安装了所有必需的 gem? bundle 应该为你安装所有东西。
  • 是的,bundle installbundle update。甚至删除了 Gemfile.lock 并运行这两个命令以及bundle
  • 能否分享完整的堆栈跟踪信息。
  • 如果多个控制器导致相同的错误,控制器可能调用相同的代码,该代码包含在另一个文件中。因此,寻找两个控制器的相似之处,它们共享哪些外部代码。如果你找到它,你就知道 end 语句在哪个类中是错误的。

标签: ruby-on-rails ruby


【解决方案1】:

如果您将ApplicationController 中的这些行翻转成如下所示:

class ApplicationController < ActionController::Base
  include SessionsHelper

  protect_from_forgery
end

protect_from_forgery 之前我从未见过任何东西——只是一种预感。

【讨论】:

  • 不,只是试着翻转它们,它没有改变任何东西。我也重启了服务器。它说错误出现在应用程序控制器的第 1 行,这真的很奇怪。
  • 那么可能存在配置问题...您的config/ 目录下可能未关闭某些内容...您是否更改了那里的任何内容?
  • config/ 下我已经安装了gem Devise 和Mailboxer,但我认为不会这样做?
  • 可能如果您已经编辑了那些您缺少关闭 end 的配置。
  • config/environments/development.rb 中我把它放在那里:Paperclip.options[:command_path] = "/usr/local/bin/" ,但我怀疑会这样做吗?
【解决方案2】:

我回溯了错误和应用程序,却发现错误是通过 require_user 操作引发的,该操作的路由不存在。

  def require_user!
    redirect_to welcome_path unless signed_in?
  end

我不知道为什么服务器不只是预先告诉我错误,而是我通过将不正确的路由更改为存在的路由来修复它。我感谢那些试图帮助我的人。谢谢各位!

【讨论】:

  • Rails 错误和堆栈跟踪通常非常神秘。真正理解他们告诉您的内容需要时间、经验和大量反复试验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
相关资源
最近更新 更多