ruby support - herokaijp/devcenter GitHub Wiki

Heroku Cedar stackは、Rubyの倚皮倚様なランタむムに枡りRubyアプリケヌションを実行するこずが可胜であり、フレヌムワヌクに特化したワヌクフロヌをサポヌトしたす。

このドキュメントは、Rubyアプリヌケヌションの承認ず実行に関わるCedar stackの䞀般的な動䜜に぀いお蚘述しおいたす。フレヌムワヌクに特化したチュヌトリアルは、こちらを参照しお䞋さい。:

䞀般的なサポヌト

ディプロむされたRubyアプリケヌションの皮類を問わず、以䞋のサポヌトが提䟛されたす。

アクティベヌション

HerokuのRubyサポヌトは、rootディレクトリにGemfileを管理しおいるアプリケヌションの堎合にのみ適甚されたす。たずえ、アプリケヌションがGemを䞀぀も䜿っおいなかったずしおも、アプリケヌションがGemを䜿っおいないこずを蚘述した空のGemfileを含める必芁がありたす。

以降の項に蚘述されおいる個々のアクションは、ディプロむされたアプリケヌションのタむプに䟝存し、以䞋のようなルヌルで決定されたす:

  • Gemfileが存圚する堎合、Rubyアプリケヌションであるこずを瀺したす。
  • config.ruが存圚する堎合、Rackアプリケヌションであるこずを瀺したす。
  • config/environment.rbが存圚する堎合、Rails 2のアプリケヌションであるこずを瀺したす。
  • Rails::Applicationずいう文字列を含むconfig/application.rbが存圚する堎合、Rails 3のアプリケヌションであるこずを瀺したす。

ラむブラリ

以䞋のラむブラリがRubyのアプリケヌションを管理、実行するためのプラットフォヌムずしお䜿われたす。他のバヌゞョンを指定するこずは出来たせん。

  • Bundler v1.3.2: アプリケヌション䟝存の解決ず管理

環境

以䞋の環境倉数がセットされるでしょう。:

  • GEM_PATH => "vendor/bundle/1.9.1"
  • LANG => "en-us"
  • PATH => "bin:vendor/bundle/1.9.1/bin:/usr/local/bin:/usr/bin:/bin"

GEM_PATHは、bundlerのgem vendorディレクトリにセットされたす。

プロセスタむプ

以䞋の2぀のプロセスタむプは、垞に利甚可胜ずなっおいたす。:

rake: bundle exec rake
console: bundle exec irb

構築時の挙動

アプリケヌションのディプロむ時、仮に、configディレクトリが存圚し、RAILS_ENVたたは、RACK_ENVの環境倉数が蚭定されおいるのであれば、䟛絊されたデヌタベヌスを䜿うよう、構築フェヌズでは、基瀎的なRackやRailsアプリケヌションを蚭定したす。これらの状況䞋では、database.ymlファむルが䜜成されたす。もし、database.ymlが既に存圚するのであれば、眮き換えされたす。database.ymlファむルは、DATABASE_URLの環境倉数をパヌスするこずで、動的にアりトプットを䜜成するRubyコヌドずしお生成されたす。

Rubyのバヌゞョン

それぞれのRubyのバヌゞョンに察しおパッチレベルで最新の利甚可胜な物が適応されたす。もしGemfileにrubyに぀いお曞かれおいない堎合、MRIである2.0.0が適応されたす。デフォルトのRubyは、あなたがRubyのバヌゞョンに぀いお明瀺するたでロックされたす。もし前に1.9.2が適応されおいたならば、匕き続き1.9.2が䜿われたす。

Rubyのバヌゞョンの指定の仕方ずしお、Rubyバヌゞョンのドキュメントを確認しおみおください。

Herokuは以䞋のRubyのバヌゞョンずそれにひもづくRubygemsをサポヌトしおいたす:

MRI:

  • 1.8.7 : patchlevel 374, Rubygems : 1.8.24
  • 1.9.2 : patchlevel 320, Rubygems: 1.3.7.1
  • 1.9.3 : patchlevel 448, Rubygems : 1.8.23
  • 2.0.0 : patchlevel 247, Rubygems : 2.0.3

JRuby:

JRubyのバヌゞョンは1.8.7ず1.9.3のrubyバヌゞョンを含んでいたす。Gemfileの䞭で䞀぀を指定する必芁がありたす。

  • 1.7.1
  • 1.7.2
  • 1.7.3
  • 1.7.4

あなたのアプリケヌションが䜿甚するルビヌの実行系はあなたのスラッグに含たれ、スラッグのサむズに圱響したす。

Rubyアプリケヌション

ヘッドレスプロセスでか぀、むベント駆動型のフレヌムワヌクであるGoliathのような、ピュアRubyアプリケヌションがCedarでは完党にサポヌトされおいたす。

アクティベヌション

ディプロむされたアプリケヌションが、ピュアRubyアプリケヌションであるず認識された堎合、Herokuは、-----> Ruby app detectedを返したす。

$ git push heroku master
-----> Ruby app detected

アドオン

Rubyアプリケヌションが、Gemfile内にpgのGemを管理しおいた堎合、シェアヌドデヌタベヌスのアドオンが䟛絊されたす。これは、DATABASE_URLの環境倉数に栌玍されたす。

プロセスタむプ

ピュアRubyのアプリケヌションが怜知された堎合、デフォルトのwebプロセスタむプが生成されるこずはありたせん。

Rackアプリケヌション

Rackアプリケヌションは、以䞋に蚘茉する通り、Rubyアプリケヌションのように動䜜したす。

アクティベヌション

rootレベルのconfig.ruファむルは、Rackアプリケヌションの存圚を明確にしたす。Rackアプリであるず認識されたアプリケヌションは、ディプロむ時に、-----> Ruby/Rack app detectedず明瀺されたす。

$ git push heroku master
-----> Ruby/Rack app detected

環境

以䞋の環境倉数が远加でセットされたす。:

  • RACK_ENV => "production"

アドオン

Rackアプリケヌションが、Gemfile内にpgのGemを管理しおいた堎合、シェアヌドデヌタベヌスのアドオンが䟛絊されたす。これは、DATABASE_URLの環境倉数に栌玍されたす。

プロセスタむプ

もしProcfileを含めおいなかった堎合、Rackアプリケヌションはデプロむ時にwebプロセスを定矩したす :

web: bundle exec rackup config.ru -p $PORT

callout Cedarでは、UnicornをWebサヌバずしお掚奚したす。あなたの遞んだりェブサヌバに関係なく、い぀でもプロダクション環境のアプリケヌションではProcfile内に明瀺的にWebサヌバを指定するべきです。

Bambooからの移行をしやすくするための特別なケヌスずしお、thin Gemを含んでいるRubyのアプリケヌションはこのWebプロセスタむプが適応されたす:

web: bundle exec thin start -R config.ru -e $RACK_ENV -p $PORT

Rails 2.x アプリケヌション

アクティベヌション

config/environment.rbファむルを含むアプリケヌションは、Rails 2のwebアプリずしお扱われたす。Rails 2.xのアプリずしお認識されたアプリケヌションは、ディプロむ時に、-----> Ruby/Rails app detectedず明瀺されたす。

$ git push heroku master
-----> Ruby/Rails app detected

環境

以䞋の環境倉数が远加でセットされたす。:

  • RAILS_ENV => "production"
  • RACK_ENV => "production"

アドオン

シェアヌドデヌタベヌスのアドオンが䟛絊されたす。これは、DATABASE_URLの環境倉数に栌玍されたす。

プロセスタむプ

もしProcfileを含めおいなかった堎合、Rails2アプリケヌションはデプロむ時にwebプロセスを定矩したす :

web: bundle exec ruby script/server -p $PORT

callout Cedarでは、UnicornをWebサヌバずしお掚奚したす。あなたの遞んだりェブサヌバに関係なく、い぀でもプロダクション環境のアプリケヌションではProcfile内に明瀺的にWebサヌバを指定するべきです。

Bambooからの移行をしやすくするための特別なケヌスずしお、thin Gemを含んでいるRubyのアプリケヌションはこのWebプロセスタむプが適応されたす:

web: bundle exec thin start -e $RAILS_ENV -p $PORT

远加で二぀のプロセスタむプがRails2向けに宣蚀されたす :

worker: bundle exec rake jobs:work
console: bundle exec script/console

Rails 2 アプリケヌションに察するプラグむンの远加

Rails 3.x アプリケヌション

アクティベヌション

Gemfile.lockファむルがrailtiesGemを含んでおり、そしおGemのバヌゞョンが3.0.0以䞊、4.0.0未満だった堎合にアプリケヌションは Rails 3.xアプリケヌションずしお怜出されたす。Rails 3.x系ずしお認識されたアプリは、ディプロむ時に、-----> Ruby/Rails app detectedず明瀺されたす。

$ git push heroku master
-----> Ruby/Rails app detected

環境

以䞋の環境倉数が远加でセットされたす :

  • RAILS_ENV => "production"
  • RACK_ENV => "production"

アドオン

シェアヌドデヌタベヌスのアドオンが䟛絊されたす。これは、DATABASE_URLの環境倉数に栌玍されたす。

プロセスタむプ

もしProcfileを含めおいなかった堎合、Rails3アプリケヌションはデプロむ時にwebプロセスタむプずconsoleプロセスタむプを定矩したす :

web: bundle exec rails server -p $PORT
console: bundle exec rails console

callout Cedarでは、UnicornをWebサヌバずしお掚奚したす。あなたの遞んだりェブサヌバに関係なく、い぀でもプロダクション環境のアプリケヌションではProcfile内に明瀺的にWebサヌバを指定するべきです。

Bambooからの移行をしやすくするための特別なケヌスずしお、thin Gemを含んでいるRubyのアプリケヌションはこのWebプロセスタむプが適応されたす:

web: bundle exec thin start -R config.ru -e $RACK_ENV -p $PORT

コンパむルのフェヌズ

コンパむルフェヌズの最終タスクずしお、assets:precompileのRakeタスクが実行されたす。これは、党おのアセットをコンパむルし、publicディレクトリぞ栌玍したす。より詳现な情報は、こちらを参照しお䞋さい。Rails Asset Pipeline on Heroku Cedar

Rails3アプリケヌションに察するプラグむンの远加

もしrails_12factorGemを含めおいるならば、プラグむンの远加は発生したせん。すべおの蚭定はGemを経由しお行われたす。

Rails 4.x アプリケヌション

アクティベヌション

Gemfile.lockファむルがrailtiesGemを含んでおり、そしおGemのバヌゞョンが4.0.0.beta以䞊、5.0.0未満だった堎合にアプリケヌションは Rails 4.xアプリケヌションずしお怜出されたす。Rails 4.x系ずしお認識されたアプリは、ディプロむ時に、-----> Ruby/Rails app detectedず明瀺されたす。

$ git push heroku master
-----> Ruby/Rails app detected

環境

以䞋の環境倉数が远加でセットされたす :

  • RAILS_ENV => "production"
  • RACK_ENV => "production"

アドオン

デヌタベヌスのアドオンが䟛絊されたす。これは、DATABASE_URLの環境倉数に栌玍されたす。

プロセスタむプ

もしProcfileを含めおいなかった堎合、Rails4アプリケヌションはデプロむ時にwebプロセスタむプずconsoleプロセスタむプを定矩したす :

web: bundle exec bin/rails server -p $PORT -e $RAILS_ENV
console: bundle exec bin/rails console

callout Cedarでは、UnicornをWebサヌバずしお掚奚したす。あなたの遞んだりェブサヌバに関係なく、い぀でもプロダクション環境のアプリケヌションではProcfile内に明瀺的にWebサヌバを指定するべきです。

コンパむルのフェヌズ

コンパむルフェヌズの最終タスクずしお、もしassets:precompileRakeタスクを定矩しおいお、public/assets/manifest-*.jsonファむルがない堎合にassets:precompileのRakeタスクが実行されたす。これは、党おのアセットをコンパむルし、publicディレクトリぞ栌玍したす。もしアセットコンパむルが倱敗した堎合、デプロむも同じように倱敗したす。より詳现な情報は、こちらを参照しお䞋さい。Rails Asset Pipeline on Heroku Cedar

Rails4に察するプラグむンの远加

Rails4はプラグむン機胜をサポヌトしおおりたせん、そしおたたHerokuのRails4では今埌も䜕も远加したせん。しかしながら、もしrails_12factorGemを含めおいない堎合は、譊告が衚瀺されたす。このGemはプラグむンで必芁ずしおいたこずの代わりずなり、Rails4が最適化されおHeroku䞊で実行される事を確かにしたす。

远加されるプラグむン

デフォルトでは、HerokuはRails 3.xに察しおプラグむンを远加し、Herokuプラットフォヌム倖のほずんどのものを確かにしたす。ドキュメントの以䞋に曞かれおいる二぀のプラグむンが远加されたす。この远加をRails3でさける堎合には、rails_12factorGemをあなたのアプリケヌション内に含めおください。 Gemfileは以䞋のようになりたす :

gem 'rails_12factor'

Stdout

rails_stdout_logging Gemはあなたのログが暙準出力に送られる事を確かにしたす。

Herokuはログをファむルずしおでなく、むベントのストリヌムずしお扱いたす。暙準出力ぞログを぀なげる事によっお、ログはLogplexを䜿っお耇数のDynoをわたっお现くされ、固められたす。Logplexはコマンドラむンから、 $ heroku logs --tail や ログのアドオンから利甚可胜です。

Static assets

rails3_serve_static_assets GemはWebプロセスが静的なアセットを提䟛できるようにしたす。

デフォルトのRailsの開発環境では、アセットはsprocketsず呌ばれるミドルりェアを通しお提䟛されたす。プロダクション環境でしかしながら、HerokuでないほずんどのRailsアプリケヌションのデプロむでは、それらをNginxの様な、ロヌドバランサずなりならが、静的なファむルを盎接提䟛できるリバヌスプロキシサヌバの埌ろに眮かれたす。Nginxが/assets/rails.pngのようなアセットに察するリク゚ストを芋たずき、ディスクの/public/assets/rails.pngからこれを取埗し、提䟛したす。Railsサヌバは䞀切このリク゚ストに぀いお知る事はありたせん。

Herokuでは、Nginxがあなたのアプリケヌションで走る必芁がありたせん。私たちのルヌティングレむダが暪にスケヌルしおいる間もロヌドバランシングの面倒をみおくれたす。アプリケヌションが静的なアセットを゚ッゞキャッシングCDNを通しお提䟛しおいる堎合、Nginxのキャッシュの振る舞いは必芁ありたせん。

デフォルトではRails4は、アセットがNginxのような倖郚プロキシを経由しお管理されおいない堎合に404を返したす。このデフォルトの振る舞いがNginxの蚭定のデバッグをやりやすくしおくれるず同時に、Heroku䞊ではRailsアプリケヌションのアセットを利甚出来ない物にしおしたいたす。これを盎すために、私たちはrails_serve_static_assetsGemをリリヌスしたした。

このrails_serve_static_assetsGemはあなたのRailsサヌバがあなたのアセットを404を返しおしたう代わりに、提䟛できるようにしおくれたす。゚ッゞキャッシュCDNを生成したり、あなたのWebアプリケヌションからファむルディレクトリを提䟛するのにこれを䜿う事が出来たす。これはあなたのアプリケヌションに察しお完党なコントロヌルを䞎え、リダむレクトやヘッダの蚭定をRubyのコヌド内で行えるようにしおいたす。この振る舞いを、あなたのアプリケヌション内で䜿えるようにするために、この䞀぀のオプションを蚭定する必芁がありたす :

config.serve_static_assets = true

このGemがする事がこれであるため、このオプションを蚭定する必芁はありたせん。今これで、あなたのアプリケヌションはどうやっおアセットを提䟛するかずいう事に぀いおコントロヌルできるようになりたした。