【问题标题】:ActionController::RoutingError (No route matches [GET] "/assets/javascriptsActionController::RoutingError (没有路由匹配 [GET] "/assets/javascripts
【发布时间】:2016-11-08 10:37:27
【问题描述】:

我正在运行一个开发服务器,并尝试在我的 rails 应用程序中加载一些静态页面和文件(图像、css 和 javasripts)以进行测试。 (总的来说,我是 rails 新手。Rails 安装已经在 Windows 10 的 Linux 子系统上完成)。 尽管我已将文件放在assets/imagesassets/javascriptsassets/stylesheets 中,但当服务器运行时,我无法在我的测试应用程序中读取这些文件。我添加的几乎所有文件都收到以下错误:

ActionController::RoutingError (No route matches [GET] "/assets/javascripts/jquery.min.js"):

ActionController::RoutingError (No route matches [GET] "/assets/javascripts/bootstrap.min.js"):

ActionController::RoutingError (No route matches [GET] "/assets/javascripts/jqBootstrapValidation.js"):

对于图片

ActionController::RoutingError (No route matches [GET] "/assets/images/portfolio/dreams-preview.png"):

这同样适用于某些 css 文件(并非全部)。

为了解决这个问题,我尝试了我在这里找到的几个想法,但我没有运气。 我尝试设置:

config.serve_static_files = true

development.rb

rake assets:precompile 

显然,rails 应用程序看不到这些文件,但我仍然不明白我必须做什么才能使它们可见。你能帮我解决这个问题吗?

【问题讨论】:

    标签: javascript css ruby-on-rails


    【解决方案1】:

    您需要手动将这些文件包含在 application.js 中,或者只写//= require_tree . 以加载所有js

    同样,你必须为 css 工作。在application.css 中添加*= require_tree .

    【讨论】:

    • 嘿,请编辑您对//= require_tree 的回答。到//= require_tree .
    • @Chakreshwar Sharma。正如您所描述的,我已经检查了这些文件,并且它们从一开始就具有正确的设置。
    • @kirkos: 检查html页面的源代码并搜索这些文件是否被加载
    • 我也试过显式调用//= require bootstrap.min,结果是一样的。
    • @Chakreshwar Sharma。在我的 html 中,调用是这样的 <script src="assets/javascripts/bootstrap.min.js"></script><img src="assets/images/logos/designmodo.jpg" class="img-responsive img-centered" alt=""> 。我检查了浏览器控制台,它没有加载文件
    【解决方案2】:

    最后,为了解决这个错误并将我的静态页面转移到 Rails,我必须修改我的homepage.html.erb 如下:

    样式表链接

    <%= stylesheet_link_tag "bootstrap.min.css" %>
    

    以下也适用:

    <link href="assets/bootstrap.min.css" rel="stylesheet">
    

    Javascript 包括

    <%= javascript_include_tag "bootstrap.min.js" %>
    

    总的来说,我发现不需要预编译。我进行了测试,它可以在有或没有预编译的情况下工作。 以下也有效:

    <script src="assets/bootstrap.min.js"></script>
    

    图像标签

    <%= image_tag("portfolio/dreams-preview.png", class: "img-responsive img-centered") %>
    

    Rails 默认使用图像的正常路径 (assets/images)。不应使用完整路径。除非图像的路径不同,否则仅使用比assets/images 更深的路径(如果存在)。

    application.html.erb 中未进行任何更改,但 assets.rb 中需要预编译 javascript 和样式表:

    Rails.application.config.assets.precompile += ['agency.min.js', 'agency.min.css', ...] 
    

    最终站点可以正常工作,尽管可能会出现一些执行 javascripts 的冲突。

    【讨论】:

      【解决方案3】:

      我实际上也遇到了这类错误。我的看起来像这样:

      F, [2018-06-16T17:46:02.121588 #6963] FATAL -- : 
      ActionController::RoutingError (No route matches [GET] "/assets/theme/bootstrap.min.css"):
      
       [2018-06-18T12:55:20.169664 #18951] FATAL -- : 
      ActionController::RoutingError (No route matches [GET] "/assets/theme/main.css"): 
      

      而且我从未在我的应用程序中添加对这些文件的任何引用。所以我没有立即意识到为什么要请求这些特定的 css 文件。好吧,碰巧我的应用程序收到 404 错误或 500 错误后,它会在公共目录中加载相应的 404.html 或 500.html。这些目录确实引用了这些 css 文件:

      <head>
        <title>PAGE NOT FOUND (404)</title>
          <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
          <link rel="stylesheet" href="/assets/theme/bootstrap.min.css">
          <link rel="stylesheet" href="/assets/theme/main.css">
      </head>
      

      所以删除这里的引用,错误就会消失。

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-23
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-21
        相关资源
        最近更新 更多