我的智慧结束了!我继承了一个rails应用程序 - 之前的开发人员决定不使用资产管道,基本上删除了所有的配置选项。我试图把它放回去。
系统如下:
*问题*
资产管道正在为application.js和application.css返回404。
*设置*
app / assets文件夹全部按照基本的rails 3安装进行设置。
** Gemfile **
gem 'sass-rails'
gem 'jquery-rails'
gem 'coffee-rails'
gem 'uglifier'
布局文件
<%= stylesheet_link_tag "application", media: 'all' %>
<%= javascript_include_tag "application" %>
application.rb 与资产相关的选项
config.assets.enabled = true
config.assets.version = '1.0'
config.assets.serve_static_assets = true
config.action_controller.asset_host = Proc.new do |source, request|
"#{request.protocol}#{request.host_with_port}/-"
end
environment / development.rb 资产相关选项
config.assets.debug = true
environment / production.rb 资产相关选项
config.assets.enabled = true
我正在使用rake资产进行编译:precompile,它成功地在public / assets下创建assets文件夹。我在app / assets下的application.css和application.js中添加了一行测试脚本,可以看到那些文件最终都是公共/资产。
所以,所有人似乎都在正确编译......但请求不起作用!
*问题*
在开发模式中,上面是渲染:
<link href="https://example.com/-/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" />
<script src="https://example.com/-/assets/application.js?body=1" type="text/javascript"></script>
在制作中它呈现:
<link href="https://example.com/-/assets/application.css" media="all" rel="stylesheet" type="text/css" />
<script src="https://example.com/-/assets/application.js" type="text/javascript"></script>
所有这些都以404发回。
:如果我将其他文件放在assets文件夹中,它们就会得到服务!例如,我将文件foo.txt与编译后的资产一起添加到public / assets文件夹,然后浏览到
https://example.com/-/assets/foo.txt
它运作得很好。我将foo.txt更改为application.css;
https://example.com/-/assets/application.css
并且它是404s,即使我可以看到文件在文件夹中 - 我已经用Google搜索了这个并且所有迹象都指向“serve_static_assets”选项,但正如您所看到的,我已经设置了它为真(加上,我正在通过apache运行所以据说不应该把它设置为真)。
如果有人知道这里发生了什么,我真的很感激!
为什么rails对不同类型文件的请求会有不同的行为?!
答案 0 :(得分:2)
排序 - 一些muppet在apache重写规则中添加了以确保所有css / js文件(正则表达式)都转到硬盘驱动器另一端的某个文件夹。