3

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

这对于生产服务器非常有用,但是对于我的“RAILS_ENV=development”服务器,这会导致问题,因为我现在从我的资产清单中获取包含所有 JavaScript 文件的页面,然后将另一个具有相同代码的文件全部分组作为预编译的资产。

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

无论如何要禁用 Heroku 上的资产预编译以用于开发模式实例?或者有什么理由没有在开发 Heroku 服务器上禁用这些?

4

3 回答 3

2

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

于 2012-01-21T13:58:46.707 回答
0

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

于 2012-01-21T13:33:38.110 回答
0

我通过在我的 Rakefile 中添加一些 voodoo 来禁用 assets:precompile 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
于 2013-06-11T18:32:09.947 回答