Created
July 3, 2013 23:01
-
-
Save interstateone/5923613 to your computer and use it in GitHub Desktop.
Precompiling assets on Heroku with require.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace :assets do | |
def invoke_or_reboot_rake_task(task) | |
Rake::Task[task].invoke | |
end | |
task :test_node do | |
begin | |
`node -v` | |
rescue Errno::ENOENT | |
STDERR.puts <<-EOM | |
Unable to find 'node' on the current path. | |
EOM | |
exit 1 | |
end | |
end | |
namespace :precompile do | |
task :all => ["assets:precompile:rjs", | |
"assets:precompile:less"] | |
task :external => ["assets:test_node"] do | |
Rake::Task["assets:precompile:all"].invoke | |
end | |
task :rjs do | |
`cd public/js; ../../bin/node lib/r.js -o build.js` | |
unless $?.success? | |
raise RuntimeError, "JS compilation with r.js failed." | |
end | |
end | |
task :less do | |
less = File.open('public/less/main.less', 'r').read | |
parser = Less::Parser.new :paths => ['public/less/'] | |
tree = parser.parse less | |
css = tree.to_css | |
Dir.mkdir 'public/css/' | |
File.open('public/css/styles.css', 'w') {|f| f.write(css) } | |
end | |
end | |
desc "Precompile JS and LESS assets" | |
task :precompile do | |
invoke_or_reboot_rake_task "assets:precompile:all" | |
end | |
end | |
task "assets:precompile" => ["assets:precompile:external"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment