资产管道将所有内容放入同一目录中。图像,样式表和javascripts都进入/ public / assets(尽管子目录受到尊重)。
有没有办法将它们复制到/ public / assets / images,public / assets / stylesheets以及public / assets / javascripts?
引起混淆的是导轨指南中的这一行:
http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets
在常规视图中,您可以访问public / assets / images目录中的图像,如下所示:
但是rails并没有使用或制作公共/资产/图像目录。
答案 0 :(得分:0)
在app/assets/
中创建一个新的子目录,如all
并移动
当前资产目录到新文件夹; e.g。
mkdir -p app/assets/all
mv app/assets/{javascripts,images,stylesheets} app/assets/all/
然后用RAILS_ENV=production rails assets:precompile
预编译资产
它应该创建那些javascripts
,images
和stylesheets
目录
在public/assets
目录下;
public/assets/javascripts
public/assets/images
public/assets/stylesheets
您可以在项目的其他位置创建新目录;像assets
,
而不是app/assets
;并将新目录添加到当前Rails
assets.rb
初始化程序
# app/config/initializers/assets.rb
Rails.application.config.assets.paths << Rails.application.root.join("assets")
然后预编译资产应该与解决方案#1 具有相同的效果。
因此,作为Sprocket-Rails引擎的一部分,它会预加载app/assets
具有以下代码块的子目录:
# ~/ruby/gems/2.3.0/gems/sprockets-rails-3.2.0/lib/sprockets/railtie.rb:54
module Rails
# [...]
class Engine < Railtie
# Skip defining append_assets_path on Rails <= 4.2
unless initializers.find { |init| init.name == :append_assets_path }
initializer :append_assets_path, :group => :all do |app|
app.config.assets.paths.unshift(*paths["vendor/assets"].existent_directories)
app.config.assets.paths.unshift(*paths["lib/assets"].existent_directories)
app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
end
end
end
end
感兴趣的行是
app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
existent_directories
的{{1}}来电正在返回
资产文件夹中的所有子目录,因此没有
当Sprocket计算其消化时,*paths["app/assets"]
文件夹中的子目录
资产。
为了重新添加这些子目录,我们必须修改当前
Rails为Sprockets配置了环境;即
public/assets
。但是,Rails.application.config.configure
就是这样
包含在Sprockets::Paths
中
Sprockets::Configuration
收益率不允许公开访问
它的内部Rails.application.config.configure
变量,也没有删除路径的方法
它通过@paths
添加路径。相反,我们必须复制
已经包含在上面的Railtie初始化程序块中的当前路径,删除
我们不想要的旧append_paths
子目录路径,只添加
我们想要的"app/assets"
目录,然后将它们追加到已配置的目录中
链轮环境;在Rails初始化程序中看起来像这样:
"app/assets"
使用这些解决方案中的任何一个也意味着您需要在所有的子目录中指定子目录
在您的视图模板中调用# 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
方法以便查找
编制资产; e.g。
asset_path
我希望这些解决方案有所帮助。