Google App Engineと並んでハンドルバーで使用するレイクパイプラインの設定

だからここに私がやろうとしていることがあります。私はember.jsアプリケーションを構築しています.JAバックエンドをGAE上で実行しています。

私はハンドルバーを使用していますが、それらをindex.htmlに貼り付けるのではなく、別々のファイルに分割してください。

Via the ember.js irc I was turned on to rake-pipeline along with minispade

ウェブフィルタおよびカスタムハンドルバーのフィルタ私はアセットファイルの作成を開始しました。私はRuby、またはgemファイルなどを知らない

だから、私は自分のcoffeescript /ハンドルバーのファイルをコンパイルしてミニスカードでコンパイルできるようにするつもりですが、devモードでは個々のファイルにアクセスしてデバッグできるようにしています。これを難しくするのは、レイクパイプラインがGAEとは異なるポートで動作していることです。だから私はこれをどう扱うか正確には分からない。 GAEのインデックスファイルは、開発中の9292ポート(rakep)の個々のファイルを指すようにしますが、プロダクションモードでは完全連結バージョンを指していますか?よく分かりません。

そこで私はここでこれをやろうとしていました: https://gist.github.com/1495740 'build'フラグによってトリガーされたセクションは1つだけです。それがうまくいくかどうかは確かではありません。

私はここに多くの混乱があることを知っています。私が言ったように、謝罪することは、Rubyのスタイルを遠隔操作することさえしていないということです。

8

2 答え

あなたがRubyの人ではないので、rakeパイプラインを使ってストックOSX環境を設定するための最も信頼できる手順は次のとおりです。

ステップ1:バンドラーをインストールする

# on OSX, using built-in Ruby
$ sudo gem install bundler --pre

ステップ2:Gemfileを作成する

# inside your app directory
$ bundle init

# will create a file named Gemfile in the root

ステップ3:rake-pipelineをGemfileに追加する

# inside the Gemfile
gem "rake-pipeline-web-filters"

ステップ4:あなたの宝石をインストールする

$ bundle install --binstubs

ステップ5:Assetfileを設定する

しかし、あなたはすでにそれをやっていた...

ステップ6:Rake :: Pipelineを実行する

# to run the preview server
$ bin/rakep

# to build your assets
$ bin/rakep build
16
追加された
ありがとうYehuda!それは私が昨晩転がすのに大いに役立ったが、ダッドレイの答えを最高のものにしてくれるだろう。
追加された 著者 Bob Spryn,

Rake::Pipeline.build is the method that evaluates an Assetfile. You can imagine that your entire Assetfile is wrapped inside a Rake::Pipeline.build {} block; you shouldn't ever need to write one inside an Assetfile.

ドキュメントのフィルタのいくつかは仮説ですが、ほとんどのフィルタはフィルタが作成される前に書かれています。しかし、最近CoffeeScriptコンパイラが追加されました。

あなたの主な質問については、現在の rakep 実装でそれを行うためのきれいな方法があるとは思えません。 Assetfile はRubyだけなので、一緒に何かをハックすることができます。私はあなたのことを書く方法は次のとおりです:

require "json"
require "rake-pipeline-web-filters"
require "rake-pipeline-web-filters/helpers"

class HandlebarsFilter < Rake::Pipeline::Filter
  def initialize(&block)
    block ||= proc { |input| input.sub(/\.handlebars$/, '.js') }
    super(&block)
  end

  def generate_output(inputs, output)
    inputs.each do |input|
      output.write "return Ember.Handlebars.compile(#{input.read.to_json})"
    end
  end
end

# process all JS, CSS and html files in app/assets
input "assets"

# processed files should be outputted to public
output "public"

# process all coffee files
match "**/*.coffee" do
  # compile all CoffeeScript files. the output file
  # for the compilation should be the input name
  # with the .coffee extension replaced with .js
  coffee_script

  # The coffee_script helper is exactly equivalent to:
  # filter Rake::Pipeline::Web::Filters::CoffeeScriptCompiler
end

match "**/*.js" do
  minispade
  if ENV['RAKEP_ENV'] == "production"
    concat "application.js"
  else
    concat
  end
end

match "**/*.handlebars" do
  filter HandlebarsFilter
  minispade
  concat "templates.js"
end

ENV ['RAKEP_ENV'] ビットが環境変数を読み込んで、JSを1つのファイルに連結するかどうかを決定する

これで、連結ビルドの場合は RAKEP_ENV = "production" rakep build を、開発ビルドの場合は rakep build を実行することができます。

9
追加された
ダッドレーに感謝します。とても有難い!だから私は最後の質問が残っている(私はそこにたくさんあると知っている)私のインデックスファイルが別のポート上にあるときにそれらをプレビューモードで即座に再コンパイルする方法です。現在のソリューションは9292ポートで処理するか、またはYehudaがGAEから何らかの形でプロキシすることを提案するようです。誰かが最高の解決策についての考えを持っているなら、それは涼しいでしょう。助けが大変ありがとう!
追加された 著者 Bob Spryn,
これはほぼ完璧に動作しています。私が見ている奇妙なことは、coffeescriptとハンドルバーのファイルは、tmpディレクトリに設定されたミニパス識別子を持っていることです(私は作業が完了していると仮定しています)。 screencast.com/t/wIXmREcreW ルートパスに設定する方法はありますか?正規化?同様に、私のjsファイルは、tmpパスを指していないが、パブリックパスの代わりに元のアセットパスを指しています。私はその識別子だけを知っていますが、私は彼らに公共の道を参照することを期待すべきですか? screencast.com/t/k9kZNcPo
追加された 著者 Bob Spryn,
追加された 著者 Bob Spryn,
MinispadeFilterは、minispade識別子をカスタマイズするためのmodule_id_generatorオプションを取ります。残念なことに、あなたがRubyを初めて使う人なら、少し毛深いかもしれません。これは私が1つのプロジェクトで使うものです::module_id_generator => proc {| input |正面にある lib/を単に置き換えるinput.path.sub(/ lib \ //、 'timelog /')。sub(/ \。js $ /、 '') timelog のパスの末尾にある .js を削除します。ここで説明する余地はあまりないので、これについて具体的に別の質問をしたいのであれば、私はそこに答えようとします。
追加された 著者 ElefantPhace,