防止Heroku在开发模式下使用预编译资产

时间:2012-01-21 13:30:28

标签: ruby-on-rails-3 ruby-on-rails-3.1 heroku asset-pipeline precompiled

目前,当我将代码推送到我的实例时,Heroku似乎决定预先编译资产。

这对于生产服务器很有用,但是对于我的“RAILS_ENV = development”服务器,这会导致问题,因为我现在从我的资产清单中单独提供所有JavaScript文件的页面,然后是具有相同代码的另一个文件所有这些都归为预编译资产。

这会导致我的jquery数据表库中断,抛出弹出错误,这些错误在我的本地环境(开发或生产)或我的生产Heroku实例中都没有。

有没有在Heroku上禁用开发模式实例的资产预编译?或者有没有任何理由为什么这些尚未在开发Heroku服务器上禁用?

3 个答案:

答案 0 :(得分:2)

如果Heroku检测到public / assets / manifest.yml文件,那么他们将不会尝试预编译您的资产并假设您自己正在处理它们。更多详情请见http://devcenter.heroku.com/articles/rails31_heroku_cedar

答案 1 :(得分:0)

AFAIK,Heroku必须预先编译资产以解决其只读FS以及Rails资产管道想要将文件写入FS的事实。我唯一可以建议的是弄清楚为什么你的资产在编译时会破裂。

答案 2 :(得分:0)

我通过在我的Rakefile中添加一些voodoo来禁用资产:预编译rake任务。

首先我添加了user-env-compile labs组件

heroku labs:enable user-env-compile

然后将其添加到我的Rakefile的开头

# found from http://blog.jayfields.com/2008/02/rake-task-overwriting.html
# used by conditional heroku asset compile magick
class Rake::Task
  def overwrite(&block)
    @actions.clear
    enhance(&block)
  end
end

然后我在lib / tasks / disable_assets_on_heroku.rake中添加这个rake任务

if ENV['RAILS_ENV'] == 'development'
  namespace :assets do
    task(:precompile).overwrite do
      puts "Asset precompile skipped in #{ENV['RAILS_ENV']}"
    end
  end
end