Rails 7 css资产无法在生产中工作,需要帮助了解在没有webpacker的情况下资产管道是如何工作的



试用rails 7,带顺风和postpass。

我在assets/stylesheets中有一些样式表,我通过同一文件夹中名为imports.css的文件导入这些样式表。

//imports.css
@import stylesheet1.css;
@import stylesheet2.css;

然后,我在application.html.erb中导入该文件,其中包含以下内容:

//application.html.erb
<%= stylesheet_link_tag "application", "imports", "data-turbo-track": "reload" %>

在开发方面,一切都如预期的那样顺利,顺风顺水。由于postpass,导入工作正常。然而,在生产(nginx,puma(中,它试图拉入这些文件,但失败了。对于我拥有的每一个样式表,我都会在浏览器控制台中看到:

得到https://mywebsite.com/assets/style/stylesheet1.cssnet::ERR_ABORTED 404(未找到(

我正试图把我的大脑从rails 6中的webpacker转移过来,不确定我需要在这里做什么。。。一些想法:

  1. 是否需要设置它,以便将样式表复制到public/assets文件夹或其他位置?在生产中有这样的设置吗?rb?(我觉得默认情况下rails应该已经这样做了(

  2. 我是否需要在部署时手动预编译这些资产?

如有帮助,不胜感激。谢谢

@stellenberger是对的,值得称赞。在我的案例中,他们为静态资产启用公共文件服务器的解决方案为我解决了这个问题,并立即开始从public提供css资产。我已经准备好了,他们只是没有得到服务。我在ALB后面的AWS中的EC2上使用Rails docker容器,并且没有本地NGINX,因此默认假设不适合我的场景,需要更改。

config/environments/production.rb文件已经提供了一个环境变量,该变量将打开公共服务器(如果存在(,称为RAILS_SERVE_STATIC_FILES,因此您所需要做的就是在构建或部署过程中设置该环境变量。由于它是一个存在性检查,任何值都是真实的,因为var的存在性就是所有检查的内容。

或者,您也可以设置

# config/environments/production.rb
config.public_file_server.enabled = true

在文件中,而不是使用ENV var,但通常ENV var比硬编码的配置更好。

在我的情况下,我将默认值更改为

# config/environments/production.rb
config.public_file_server.enabled = ENV.fetch("RAILS_SERVE_STATIC_FILES") { true }

这样,我的默认值是true,并且在不设置var的情况下启用,但如果需要,我仍然可以使用var禁用它。

我需要在部署时手动预编译这些资产吗?

是。由于您现在不使用节点工作流,而是直接依赖于Sprockets和资产,因此您需要在Production中执行预编译步骤。

设置环境变量RAILS_ENV=productionRAILS_SERVE_STATIC_FILES=true为我完成了任务(使用Rails 7.0.4(

相关内容

  • 没有找到相关文章

最新更新