目前,当我将代码推送到我的实例时,Heroku似乎决定预先编译资产。
这对于生产服务器很有用,但是对于我的“RAILS_ENV = development”服务器,这会导致问题,因为我现在从我的资产清单中单独提供所有JavaScript文件的页面,然后是具有相同代码的另一个文件所有这些都归为预编译资产。
这会导致我的jquery数据表库中断,抛出弹出错误,这些错误在我的本地环境(开发或生产)或我的生产Heroku实例中都没有。
有没有在Heroku上禁用开发模式实例的资产预编译?或者有没有任何理由为什么这些尚未在开发Heroku服务器上禁用?
答案 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