通常、Heroku は小さな仮想マシン インスタンスを使用するため、処理の負荷によっては、最適なアーキテクチャの選択ではない場合があります。ただし、使用する場合は、次のようにします。
バックグラウンド タスク gem を使用して処理を行います。これを別のプロセス (Heroku 用語では dyno ではなくワーカーと呼びます) で実行します。Delayed Job は、Heroku への統合に関する豊富なオンライン情報を備えた、バックグラウンド タスクの実証済みのソリューションですが、最新バージョンの Ruby で新しいスレッド システムを使用する Sidekiq のような新しいものもあります。それらはすべてを dyno で実行できるようにしますが、すべてのバックグラウンド処理を Web サーバーの dyno から遠ざけておくと便利だと思います。そのため、Delayed Job (または同様のもの) で問題ありません。
C/C++ の統合に関しては、まだこれを行う必要はありません。ただし、C または C++ コードを統合してネイティブにコンパイルする gem を作成できることはわかっています。JRuby ではなく Ruby を使用している限り、Heroku で問題が発生することはないと思います。これを達成する他の方法があります。具体的には、このトピックに関する SO の質問を見てください。
Ruby内からC++関数を呼び出すにはどうすればよいですか
拡張機能を作成してから、それを含む gem を作成する必要があるようです。これらのリンクは役立つ場合とそうでない場合があります。
http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html
http://guides.rubygems.org/gems-with-extensions/
ライブラリや実行可能ファイルを Heroku インスタンスに追加するのは難しいと思うので、gem を作成することをお勧めします。公開したくない場合は、gem をベンダー ディレクトリに保存できます。
全体として、ウェブサーバーを S3 または画像を保存している場所にアップロードします (これは、ウェブサーバーを AWS JS API の足がかりとして使用せずにブラウザで直接行うことができます。役立つ宝石を探してください。)
次に、Web サーバーはバックグラウンド タスクを要求して画像を処理できます。
それらを保存していない場合、事態はもう少し興味深いものになります...バックグラウンドタスクを使用している場合はデータベースが必要になるため、画像データをデータベースのブロブとしてワーカーに渡すことができます。
あなたが本当にたまにしかこのことを打たない限り、私は本当にウェブサーバーのdynoだけですべての処理をするつもりはありません。複数のユーザーがいると、すぐにボトルネックにぶつかります。
バックグラウンド プロセスは、画像テーブルの行にフラグを設定できるため、Web サーバーは処理の完了をユーザーに知らせることができます。(AJAXを利用したアップロード完了画面でJSを利用して情報をポーリングできます)
もちろん、さまざまな要因に応じて、これを実現する方法は他にもたくさんあります。
答えが曖昧であることをお詫びしますが、質問はかなり自由回答です。
幸運を。