3.4 使用 Buildpacks

Deis 支持通过 Heroku Buildpacks 部署应用程序。如果你对 遵循 Heroku 构建应用程序的最佳实践有兴趣或是你正在部署一个已经运行在 Heroku 上的应用程序,那么 Buildpacks 是非常有用的。

预先准备应用程序

如果你没有一个已经存在的应用程序,你可以 clone 一个示例应用程序,证明 Heroku Buildpack 工作流。

  1. $ git clone https://github.com/deis/example-ruby-sinatra.git
  2. $ cd example-ruby-sinatra

创建一个应用程序

使用 deis createController 创建一个应用程序。

  1. $ deis create
  2. Creating application... done, created unisex-huntress
  3. Git remote deis added

使用 push 来部署

使用 git push deis master 来部署你的应用程序:

  1. $ git push deis master
  2. Counting objects: 95, done.
  3. Delta compression using up to 8 threads.
  4. Compressing objects: 100% (52/52), done.
  5. Writing objects: 100% (95/95), 20.24 KiB | 0 bytes/s, done.
  6. Total 95 (delta 41), reused 85 (delta 37)
  7. -----> Ruby app detected
  8. -----> Compiling Ruby/Rack
  9. -----> Using Ruby version: ruby-1.9.3
  10. -----> Installing dependencies using 1.5.2
  11. Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
  12. Fetching gem metadata from http://rubygems.org/..........
  13. Fetching additional metadata from http://rubygems.org/..
  14. Using bundler (1.5.2)
  15. Installing tilt (1.3.6)
  16. Installing rack (1.5.2)
  17. Installing rack-protection (1.5.0)
  18. Installing sinatra (1.4.2)
  19. Your bundle is complete!
  20. Gems in the groups development and test were not installed.
  21. It was installed into ./vendor/bundle
  22. Bundle completed (8.81s)
  23. Cleaning up the bundler cache.
  24. -----> Discovering process types
  25. Procfile declares types -> web
  26. Default process types for Ruby -> rake, console, web
  27. -----> Compiled slug size is 12M
  28. -----> Building Docker image
  29. Uploading context 11.81 MB
  30. Uploading context
  31. Step 0 : FROM deis/slugrunner
  32. ---> 5567a808891d
  33. Step 1 : RUN mkdir -p /app
  34. ---> Running in a4f8e66a79c1
  35. ---> 5c07e1778b9e
  36. Removing intermediate container a4f8e66a79c1
  37. Step 2 : ADD slug.tgz /app
  38. ---> 52d48b1692e5
  39. Removing intermediate container e9dfce920e26
  40. Step 3 : ENTRYPOINT ["/runner/init"]
  41. ---> Running in 7a8416bce1f2
  42. ---> 4a18f93f1779
  43. Removing intermediate container 7a8416bce1f2
  44. Successfully built 4a18f93f1779
  45. -----> Pushing image to private registry
  46. Launching... done, v2
  47. -----> unisex-huntress deployed to Deis
  48. http://unisex-huntress.local.deisapp.com
  49. To learn more, use `deis help` or visit http://deis.io
  50. To ssh://git@local.deisapp.com:2222/unisex-huntress.git
  51. * [new branch] master -> master
  52. $ curl -s http://unisex-huntress.local.deisapp.com
  53. Powered by Deis!

因为一个 Heroku 风格的应用程序被检测到了,web 进程类型第一次部署自动被扩展到 1。

已经包含的 Buildpacks

为了方便起见,许多 buildpacks 与 Deis 捆绑在一起:

Deis 将重复循环每个 buildpack 的 bin/detect 脚本来匹配你正在发布的代码。

使用定制的 Buildpack

为了使用一个定制的 buildpack,设置 BUILDPACK_URL 环境变量。

  1. $ deis config:set BUILDPACK_URL=https://github.com/dpiddy/heroku-buildpack-ruby-minimal
  2. Creating config... done, v2
  3. === humble-autoharp
  4. BUILDPACK_URL: https://github.com/dpiddy/heroku-buildpack-ruby-minimal

在你下一步的 git push,定制的 buildpack 将被使用。