如何运行资产:在Heroku的子目录中使用Rails预编译?

时间:2012-02-16 02:16:02

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

我在子目录中有一个rails应用程序,发布到heroku。

Gemfile
Gemfile.lock
Rakefile
config.ru
railshost/
  app/
  etc...
  • 如果我从基础Rakefile运行它(本地),assets:precompile:nondigest失败(nil应该是sprockets环境)

    undefined method 'each_logical_path' for nil:NilClass
    .../gems/actionpack-3.1.1/lib/sprockets/static_compiler.rb:18:in `compile'
    
  • 如果我将assets:precompile扩展到cd到railshost然后运行任务,它就会在Heroku上失败,因为找不到bin/node - 它似乎是一个亲戚路径。

1 个答案:

答案 0 :(得分:0)

(我正在从有一些其他事情发生的应用程序中挑选部分,所以希望这一切都有效)

Rakefile

预编译调用一些子任务。我们不得不欺骗它来维持我们的黑客行为。

ENV['RAILS_GROUPS'] = nil # trick asset rake file into shelling out

Rake必须在rails目录中运行

task :railshost do
  cd 'railshost'
end

# this gets called by heroku
namespace :assets do
  task :precompile => [:railshost]

  namespace :precompile do
    task :nondigest => [:railshost]
  end
end

不幸的是,这打破了Heroku的节点路径

railshost/bin/node

#!/bin/sh
../bin/node $*

当然通常都适用 - 设置应用程序来编译资产,提供资产等等。