Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将资产编译到图像、样式表和javascript目录中?_Ruby On Rails_Asset Pipeline - Fatal编程技术网

Ruby on rails 如何将资产编译到图像、样式表和javascript目录中?

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

资产管道将所有内容放入同一目录中。图像、样式表和Java脚本都进入/public/assets(尽管子目录是受尊重的)

有没有办法将它们复制到/public/assets/images、public/assets/stylesheet和public/assets/javascripts中

更让人困惑的是rails指南中的这一行:

在常规视图中,您可以访问public/assets/images目录中的图像,如下所示:

但是rails不使用或公开/assets/images目录。

Solution#1: 在
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