【问题标题】:RAILS 6 + Webpacker -- route error for packs/css|js/application-* in production environmentRAILS 6 + Webpacker -- 生产环境中 packs/css|js/application-* 的路由错误
【发布时间】:2021-08-24 00:48:41
【问题描述】:

在开发模式下,一切看起来都很棒。但是当我切换到生产时,找不到引导程序。当我查看日志时,我看到如下错误:

ActionController::RoutingError (No route matches [GET] "/packs/js/application-2a5806e943e281221741.js"):

CSS 和 JS 都是如此。当我查看 public/packs 文件时,文件确实存在于相应的子目录中(.js 文件的 js 等)。所以,webpacker 完成了它的工作,但 puma 没有找到它。有任何想法吗?这是一个旧的 Rails 应用程序,它被迁移了几个版本的 rails,所以我确信在将所有内容捆绑在一起时我错过了一些东西。

【问题讨论】:

  • 您是否在 production.rb 中将 config.public_file_server.enabled 设置为 true ?
  • 你不知道你让我有多开心!这被设置为一些环境变量被设置为......显然我没有设置。它现在工作得很好!

标签: ruby-on-rails ruby-on-rails-6 production-environment webpacker


【解决方案1】:

为了扩展我认为是该问题正确答案的 Tenzin 的评论,开发中的 Rails 将始终重新渲染资产并为它们提供服务。这很慢,但对于在开发过程中查看快速变化很有用。

当我们想要部署到生产环境时,问题是 Rails 开始提供静态文件,这意味着服务器不再会在每次请求时呈现它们。它将为他们提供一次并永远为他们服务。使用 webpacker,您可以在 webpacker.yml 中找到这些资产的服务位置

  public_root_path: public
  public_output_path: packs

因此,如果您要在本地部署或尝试运行生产,请首先确保为生产编译您的资产,以便创建这些静态文件。

rake assets:precompile RAILS_ENV=production

然后确保无论服务器在哪里运行,它都将 ENV 变量 RAILS_SERVE_STATIC_FILES 设置为任何值。从 production.rb 可以看出,

  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

只是检查这个变量是否存在。如果是,那么它不会像我们讨论的那样重新渲染,它会寻找 webpacker.yml 中显示的静态文件。

另外一个小提示,如果您使用 React UI 或 Bootstrap 之类的东西并且缺少 CSS,请确保您是根据库的文档导入 CSS。

例如,在 Bootstrap 中,您需要在 app/javascript/packs/stylesheets(实际上是在 /javascript 文件夹中的任何位置)创建一个 application.scss 文件并将其导入 /javascript/packs/application.js。

在 application.scss 你会想要

import "~bootstrap/scss/bootstrap"

这当然是在你将 Bootstrap 添加到你的 package.json 之后

yarn add bootstrap

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 2021-09-09
    • 2011-11-30
    • 2019-08-06
    • 2012-04-19
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多