我在子目录中有一个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
- 它似乎是一个亲戚路径。
答案 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 $*
当然通常都适用 - 设置应用程序来编译资产,提供资产等等。