1

git リポジトリのクローンを作成し、タスクを呼び出し、作成したファイルを GitHub リポジトリにアップロードする単純なherokuアプリを作成しようとしています。複製されたリポジトリのビルド タスクは、バイナリのビルドに gemを使用するRake Pipelineを使用します。bundle installrake distexecjs

問題を説明するサンプル アプリをhttps://github.com/pangratz/github-uploader-testに作成しました。アプリケーションのディレクトリ構造は次のとおりです。

/upload.rb
/project
   Rakefile
   Assetfile
   Gemfile
   Gemfile.lock

アプリ自体は、次のようなルートを持つ単純なシナトラアプリです。get '/'

アップロード.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 リポジトリーをシミュレートします。RakefileAssetfileGemfileおよびが含まれていますGemfile.lock

プロジェクト/Rakefile

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 ランタイムが見つからないという問題があるようです...

アップロード.rb

get '/test' do
  puts ExecJS.eval "'red yellow blue'.split(' ')"
end
4

2 に答える 2

0

設定を試すこともできますENV['BUNDLE_GEMFILE']=/path/to/project/Gemfile。これにより、 install と exec が正しい Gemfile を見つけられるようになります。

于 2012-06-20T16:50:03.360 に答える
0

Heroku でイシューを開いたところ、問題を解決できました。問題は、 と のDir.chdir("project")組み合わせにより、JavaScript ランタイムを見つけるために必要Bundler.with_clean_envな無効な結果が生じることでした。PATH簡単に言えば、ここに実用的なソリューションがあります:

get '/' do
  Dir.chdir "project" do
    Bundler.with_clean_env do
      ENV["PATH"] = "/app/bin:#{ENV['PATH']}"
      system "bundle install --without WATWAT"
      system "bundle exec rake dist"
    end
  end
end

ソリューションに関する注意: --without WATWATHeroku は を使用してアプリをインストールするため、 が必要ですbundle install --without development。は--without連続した呼び出しで記憶され、developmentgroup の gem は で必要になるためAssetfile、このオプションは上書きする必要があります。--without ''どういうわけか使用してもうまくいかないので、存在しないグループWATWATを使用して、すべてのグループをGemfile.

于 2012-07-02T18:04:56.243 に答える