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

dsf9zpds  于 2022-11-04  发布在  Ruby
关注(0)|答案(3)|浏览(125)

尝试轨道7,顺风和postcss。
我在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" %>

在开发阶段,一切都按预期运行良好,与tailwind很好地配合。由于postcss,导入工作正常。但是在生产阶段(nginx,puma),它试图拉入这些文件,并失败了。对于我拥有的每一个样式表,我在浏览器控制台中看到:
404(您访问的页面不存在)返回首页
我正在尝试将我的大脑从rails 6中的webpacker转移过来,不确定我需要在这里做什么...一些想法:
1.我是否需要设置它,以便样式表被复制到public/assets文件夹或其他文件夹中?在production.rb中是否有这样的设置?(我觉得Rails默认情况下应该已经这样做了)
1.我是否需要在部署时手动预编译这些资产?
如有帮助,将不胜感激。谢谢!

7gcisfzg

7gcisfzg1#

@stellenberger是对的,值得称赞。在我的案例中,他们为静态资产启用公共文件服务器的解决方案为我解决了这个问题,并立即开始从公共服务器提供css资产。我已经在预编译了,只是它们没有得到服务。我在AWS中的一个ALB后面的EC2上使用Rails Docker容器。并且没有本地NGINX,因此默认设置对我的场景不正确,需要更改。
config/environments/production.rb文件已经提供了一个名为RAILS_SERVE_STATIC_FILES的环境变量,如果存在的话,它将打开公共服务器,因此您所需要做的就是在构建或部署过程中设置该环境变量。因为这是一个存在检查,所以任何值都是真实的,因为只检查var是否存在。
或者,您也可以设定


# config/environments/production.rb

config.public_file_server.enabled = true

而不是使用ENV变量,但通常ENV变量比硬编码的配置更好。
在我的示例中,我将默认值更改为


# config/environments/production.rb

config.public_file_server.enabled = ENV.fetch("RAILS_SERVE_STATIC_FILES") { true }

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

cbjzeqam

cbjzeqam2#

我是否需要在部署时手动预编译这些资产?
是的。由于您现在没有使用Node工作流,而是直接依赖于Sprockets和资产,因此您需要在Production中执行预编译步骤。

pftdvrlh

pftdvrlh3#

设置环境变量RAILS_ENV=productionRAILS_SERVE_STATIC_FILES=true对我来说已经完成了这项工作(使用Rails 7.0.4)。

相关问题