3

現在、私のコードを私のインスタンスにプッシュするとHerokuはアセットをあらかじめコンパイルすることになっているようです。Herokuが開発モードでプリコンパイルされたアセットを使用しないようにする

これはプロダクションサーバには最適ですが、私の "RAILS_ENV = development"サーバでは、アセットマニフェストから個別に提供されたすべてのJavaScriptファイルと同じページを取得するため、コードはすべて事前コンパイルされた資産としてグループ化されています。

これは私のローカル環境(開発または生産)や私の生産Herokuインスタンスでは得られないポップアップエラーを投げて、私のjqueryデータテーブルライブラリが壊れてしまいます。

開発モードインスタンスでHerokuのアセットの事前コンパイルを無効にする方法はありますか?あるいは、既に開発用Herokuサーバー上でこれらが既に無効にされていない理由はありますか?

答えて

2

Herokuがpublic/assets/manifest.ymlファイルを検出すると、資産をプリコンパイルしようとせず、自分で処理していると仮定します。詳細はhttp://devcenter.heroku.com/articles/rails31_heroku_cedar

+1

これは私が開発に押し進めるコードと、 (もしそうでなければ、生産は資産をあらかじめコンパイルするのをやめてしまうでしょう!)チップをありがとう - 私を立ち上げることができますが、私は別のコードを持つ必要がないソリューションを提供してくれるのだろうかと思います。/git branch for development heroku(例えばENV変数、Ruby環境のrbスクリプト値を使用) – Phantomwhale

+0

あなたのアプリでpublic/assets/manifest.ymlが検出された場合、Herokuはあなた自身が資産のコンパイルを処理しているとみなし、あなたの資産をコンパイルしてください。 Rails 4では、代わりにpublic/assets/manifest- .jsonが必要です。両方のバージョンで$ rakeアセットを実行することでこのファイルを生成することができます:ローカルでプリコンパイルし、結果ファイルをGitにチェックする。 –

0

AFAIK、Herokuは、読み込み専用FSと、Rails資産パイプラインがFSにファイルを書き込もうとしているという事実を回避するために、資産をプリコンパイルする必要があります。私が提案できる唯一のことは、あなたの資産がコンパイルされたときになぜ破壊されているのかを理解することです。

+0

私はそれが2度ロードされていると思います。一度開発モードのレールがJSマニフェストファイルを分解し、ページ内のすべての個々のJSリンクを含みます。そして、ページが再び進み、すべてのコードを含むJSコンパイル済みのプリコンパイル済みのマニフェストをロードします。これは私のローカル開発マシン(あらかじめコンパイルされたアセットがない)やプロダクション環境(すべてのアセットがあらかじめコンパイルされていなければならない)では発生しません – Phantomwhale

0

私はRakefileにアセットを無効にするいくつかのブードーを追加することでこれを回避しました。最初

私は、その後、私はlibに/タスク/ disable_assets_on_herokuでこのrakeタスクを追加し、私のRakefile

# found from http://blog.jayfields.com/2008/02/rake-task-overwriting.html 
# used by conditional heroku asset compile magick 
class Rake::Task 
    def overwrite(&block) 
    @actions.clear 
    enhance(&block) 
    end 
end 

の先頭にこれを追加し、ユーザー-ENV-コンパイルラボコンポーネント

heroku labs:enable user-env-compile 

を追加.rake

if ENV['RAILS_ENV'] == 'development' 
    namespace :assets do 
    task(:precompile).overwrite do 
     puts "Asset precompile skipped in #{ENV['RAILS_ENV']}" 
    end 
    end 
end 
関連する問題