重现生产环境中发生的资产管道错误,而不是开发?

时间:2012-04-21 08:17:53

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

在Rails 3.2.3 app中,遇到错误,部署到heroku时类似于以下内容: -

Started GET "/" for 59.xx.xx.xx at 2012-xx-xx xx:xx:xx +0000
Completed 500 Internal Server Error in 62ms

ActionView::Template::Error (style.css isn't precompiled)

所以,事实证明:样式表由于某种原因没有得到预编译(是的,我尝试过资产:预编译)。

解决这个问题,首先我必须在我的开发盒上重现这个错误,所以我可能知道出了什么问题。

因此,我的问题是:

如何在我的机器上重现此问题?

2 个答案:

答案 0 :(得分:3)

默认情况下,Rails只预编译application.jsapplication.css(以及所有非JS / CSS资产)。如果您希望它预编译另一个文件(如果在布局中使用javascript_include_tag等等,则需要执行此操作),则需要将文件添加到预编译文件列表中。

打开config/environments/production.rb,应该有一个以config.assets.precompile开头的注释掉的行以及上面的解释。取消注释该行并将其更改为:

config.assets.precompile += %w(stylesheets/style.css)

(如果那不是正确的目录,请使用style.css的路径。)

要在开发时重现此问题,您必须修改development.rb以使其具有与production.rb相同的所有资源设置。

[编辑]

如您所见,您可以从命令行在另一个环境中启动内置Rails服务器 - 但是,除了资产之外,这会影响所有内容(类重新加载,数据库连接,电子邮件设置等)管道设置,因此它有时可能充满欺骗(意外的副作用)而在最坏的情况下是危险的(意外地向用户发送电子邮件)。并不是说它没用,只要小心。 ;)

答案 1 :(得分:0)

我能够在本地开发机上运行生产环境,只需在启动服务器时指定环境

即可
$ RAILS_ENV=production rails s
=> Booting Thin
=> Rails 3.2.3 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server

并且能够重现这个问题。不知道在开发与开发之间切换是如此微不足道。轨道生产环境