在我的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/
中。但默认情况下,此文件夹为.gitignore
d。由于文件夹大约是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能够支持一种默认情况下在部署后生成资产的方法,或者像我在他们的文档中那样描述一种选项,那就太好了。