Ruby on rails 如何将资产编译到图像、样式表和javascript目录中?
资产管道将所有内容放入同一目录中。图像、样式表和Java脚本都进入/public/assets(尽管子目录是受尊重的) 有没有办法将它们复制到/public/assets/images、public/assets/stylesheet和public/assets/javascripts中 更让人困惑的是rails指南中的这一行: 在常规视图中,您可以访问public/assets/images目录中的图像,如下所示: 但是rails不使用或公开/assets/images目录。Solution#1: 在Ruby on rails 如何将资产编译到图像、样式表和javascript目录中?,ruby-on-rails,asset-pipeline,Ruby On Rails,Asset Pipeline,资产管道将所有内容放入同一目录中。图像、样式表和Java脚本都进入/public/assets(尽管子目录是受尊重的) 有没有办法将它们复制到/public/assets/images、public/assets/stylesheet和public/assets/javascripts中 更让人困惑的是rails指南中的这一行: 在常规视图中,您可以访问public/assets/images目录中的图像,如下所示: 但是rails不使用或公开/assets/images目录。Solution
app/assets/
中创建一个新的子目录,如all
并移动
将当前资产目录放入新文件夹中;e、 g
mkdir -p app/assets/all
mv app/assets/{javascripts,images,stylesheets} app/assets/all/
然后当使用RAILS\u ENV=production-RAILS-assets预编译资产时:precompile
它应该创建那些javascripts
,图像
和样式表
目录
在public/assets
目录下
public/assets/javascripts
public/assets/images
public/assets/stylesheets
解决方案#2:
您可以在项目的其他地方创建新目录;像资产
,
而不是app/assets
;并将新目录添加到当前Rails
assets.rb
初始值设定项中的资产路径配置
# app/config/initializers/assets.rb
Rails.application.config.assets.paths << Rails.application.root.join("assets")
兴趣线是
app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
它正在返回对*路径[“app/assets”]
下的现有目录的调用
资产文件夹中的所有子目录,因此没有
Sprocket计算其摘要时,public/assets
文件夹中的子目录
资产
为了重新添加这些子目录,我们必须修改当前
链轮导轨配置环境;即
Rails.application.config.configure
。但是,链轮::路径
,即
包含在链轮::配置中
Rails.application.config.configure
to不允许公共访问
它的内部@path
变量,也没有删除路径的方法,例如
它不需要通过其附加路径添加路径。相反,我们必须复制
上述Railtie初始值设定项块已包含的当前路径,请删除
旧的“app/assets”
子目录路径是我们不想要的,只添加
“app/assets”
我们想要的目录,然后将它们追加回配置的
链轮环境;在Rails初始值设定项中看起来像这样:
# app/config/initializers/assets.rb
Rails.application.config.assets.configure do |env|
old_paths = env.paths.dup
new_paths = old_paths - Rails.application.paths["app/assets"].existent_directories
new_paths << Rails.application.root.join("app", "assets")
env.clear_paths
new_paths.each { |path| env.append_path(path) }
end
我希望这些解决方案能有所帮助。您尝试过吗RAILS_ENV=production bin/RAILS assets:precompile
app/assets
中的文件应出现在公共资产目录中,其md5hash
指纹作为文件名的后缀,以帮助在客户端浏览器中过期/替换下载的资产,他们将来是否应该改变。@sonna:如果你对此有信心,你应该给出一个正确的答案。我不确定他们是否想改变输出目录;所以它的public/images/example.png
而不是public/example.png
;或者,如果他们只是试图在开发中预编译资产,因为public/assets/images
将不存在,除非资产是多个子目录,如app/assets/images/images/example.png
或app/assets/all/images/example.png
来解析Rails中的链轮逻辑路径
。@sonna我想更改资产编译到的目录生产,这样图像、字体、样式表和Java脚本都位于子目录中
# app/config/initializers/assets.rb
Rails.application.config.assets.configure do |env|
old_paths = env.paths.dup
new_paths = old_paths - Rails.application.paths["app/assets"].existent_directories
new_paths << Rails.application.root.join("app", "assets")
env.clear_paths
new_paths.each { |path| env.append_path(path) }
end
<%= asset_path "images/example.png" %>
<%= asset_path "javascripts/application.js" %>
<%= asset_path "stylesheets/application.css" %>
/assets/images/example-ca63e56ac855bdfb187479a35a7476cd65c539727f84fea19e1ad258cf3d23f5.png
/assets/javascripts/application-a4f3e75c7f7aa6d6cbc2ebcbb436b12aca442553219883805baebdd2eecd5471.js
/assets/stylesheets/application-539757f75200b6ea43399bf5e25cbc2819c1e6a610f94d5c9beaf91fec89384e.css