Rails-当我需要静态映像时,为什么/public/assets被gitigned了



在我的Rails(Rails 7(应用程序中,我有一些小资产(一个徽标和一个favicon(,我想在生产和开发中呈现这些资产。

我把资产放在/app/assets/images中。

由于不建议设置# config.assets.compile = true,因此我运行RAILS_ENV=production bundle exec rake assets:precompile。然后,它构建了大量文件(它运行esbuild app/javascript/application.tsx,因为我在这个rails应用程序中运行了一个typescript react应用程序。(并将它们放在/public/assets/中。但默认情况下,此文件夹为.gitignored。由于文件夹大约是5.5Mb,我可以理解为什么。现在,heroku文档告诉我将/public/assets/添加到git中,然后我的资产应该显示出来,但为什么默认情况下会忽略这个目录呢?

我是不是错过了什么?我应该从.gignore文件中删除目录吗?

或者我可以直接将资产放在public文件夹中吗?如果是,如何在erb文件中添加引用公用文件夹的图像?

静态资产的主页是/public文件夹。在默认的Rails 7应用程序中,你会发现一些错误页面(例如/public/404.html(和图标(例如/public/favicon.ico(已经在该文件夹中了。此文件夹中的文件可直接使用example.com/favicon.ico,也可在公共路径example.com/public/favicon.ico下使用。可以禁用提供公共文件,请参阅下文。

为了回答您的子问题;如何在erb文件中添加引用公用文件夹的图像"您需要确保告诉Rails这是一条绝对路径,而不是资产管道中某个地方的相对路径。这是用一个前导斜杠完成的。

以下比较包括存储在app/assets/images/public中的名为logo.png的徽标

<%= image_tag "logo.png" %>
<!-- becomes <img src="/assets/logo-1f04fdc3ec379029cee88d56e008774df299be776f88e7a9fe5.png"> or similar -->

<%= image_tag "/logo.png" %>
<!-- note the leading slash. This becomes <img src="/logo.png"> -->
<img src="/logo.png">
<!-- or use plain HTML if you don't need/want to use the helper -->

您也可以使用子目录;CCD_ 16将在CCD_ 17(或CCD_ 18(处可用。

《资产管道轨道指南》第2章第2段提供了更多信息。其中提到,此功能取决于是否设置了config.public_file_server.enabled

在Rails7中,config默认为config/production.rb中的ENV["RAILS_SERVE_STATIC_FILES"].present?。如果您使用的是Heroku,则可以使用heroku config:get RAILS_SERVE_STATIC_FILES检查此变量。

该指南还提供了更多信息,说明如何调整所有这些行为,使这些文件由您的上游网络服务器(例如nginx(或CDN提供服务。

感谢您的评论,我直接将资产添加到公共文件夹中,效果很好。不过,如果Heroku能够支持一种默认情况下在部署后生成资产的方法,或者像我在他们的文档中那样描述一种选项,那就太好了。

相关内容

最新更新