我尝试创建一个简单的heroku应用程序,它克隆一个 git 存储库,调用bundle install
一个rake dist
任务,然后将创建的文件上传到 GitHub 存储库。克隆存储库的构建任务使用Rake Pipeline,它使用execjs
gem 来构建二进制文件。
我在https://github.com/pangratz/github-uploader-test创建了一个示例应用程序,它说明了这个问题。应用程序的目录结构如下:
/upload.rb
/project
Rakefile
Assetfile
Gemfile
Gemfile.lock
该应用程序本身是一个带有路由的简单sinatraget '/'
应用程序,如下所示:
上传.rb
get '/' do
Dir.chdir "project" do
Bundler.with_clean_env do
system "bundle install"
system "bundle exec rake dist"
end
end
end
出于演示目的,该project
文件夹模拟了克隆的 git 存储库。它包含一个Rakefile
、Assetfile
和。Gemfile
Gemfile.lock
项目/耙文件
desc "Build"
task :dist do
Rake::Pipeline::Project.new("Assetfile").invoke
end
项目/资产文件
require "rake-pipeline-web-filters"
require "json"
require "uglifier"
require "execjs"
puts ExecJS.eval "'red yellow blue'.split(' ')"
项目/Gemfile
source "http://rubygems.org"
gem "rake-pipeline", :git => "https://github.com/livingsocial/rake-pipeline.git"
gem "rake-pipeline-web-filters", :git => "https://github.com/wycats/rake-pipeline-web-filters.git"
gem "colored"
gem "uglifier", :git => "https://github.com/lautis/uglifier.git"
group :development do
gem "rack"
gem "rest-client"
gem "github_api"
gem "ember-docs", :git => "https://github.com/emberjs/docs-generator.git"
gem "kicker"
end
的调用bundle install
似乎有效。问题是rake dist
由于错误而失败Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
。
heroku 应用程序本身是使用选项创建的--stack cedar
。
我还创建了一个使用的路由'/test'Execjs
并且这不会失败。因此,似乎Bundler.with_clean_env
没有找到已安装的 JavaScript Runtime 存在问题...
上传.rb
get '/test' do
puts ExecJS.eval "'red yellow blue'.split(' ')"
end