Rails资产管道返回404

时间:2014-07-09 12:58:39

标签: ruby-on-rails ruby asset-pipeline

我的智慧结束了!我继承了一个rails应用程序 - 之前的开发人员决定不使用资产管道,基本上删除了所有的配置选项。我试图把它放回去。

系统如下:

  • Rails 3.2.18托管于https://example.com/-/
  • 瘦+ apache(不是heroku)
  • 从rails 2迁移到rails 3.2.18,所以旧版本在example.com,新版本在example.com/-/ - 使用apache重写规则完成。

*问题*

资产管道正在为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对不同类型文件的请求会有不同的行为?!

1 个答案:

答案 0 :(得分:2)

排序 - 一些muppet在apache重写规则中添加了以确保所有css / js文件(正则表达式)都转到硬盘驱动器另一端的某个文件夹。