Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Takahiro Himura
PDF, PPTX
1,280 views
Yesod on Heroku
(祝) Yesod 1.0 勉強会 用のスライドです http://partake.in/events/76f421e7-c3ca-49bf-b28e-f9ede8032f0b
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 20
2
/ 20
3
/ 20
4
/ 20
5
/ 20
6
/ 20
7
/ 20
8
/ 20
9
/ 20
10
/ 20
11
/ 20
12
/ 20
13
/ 20
14
/ 20
15
/ 20
16
/ 20
17
/ 20
18
/ 20
19
/ 20
20
/ 20
More Related Content
PDF
Dockerと継続的インテグレーション
by
Yahoo!デベロッパーネットワーク
PDF
Hadoop on LXC
by
俊夫 森
PDF
コンテナ情報交換会2
by
Masahide Yamamoto
PDF
Openresty
by
ogawatti
PDF
Dive into dockerネットワーク
by
Kazuyuki Mori
PDF
Dockerのディスクについて ~ファイルシステム・マウント方法など~
by
HommasSlide
PDF
静的サイトどこにする?
by
ogawatti
PDF
PaaSの作り方 Sqaleの場合
by
hiboma
Dockerと継続的インテグレーション
by
Yahoo!デベロッパーネットワーク
Hadoop on LXC
by
俊夫 森
コンテナ情報交換会2
by
Masahide Yamamoto
Openresty
by
ogawatti
Dive into dockerネットワーク
by
Kazuyuki Mori
Dockerのディスクについて ~ファイルシステム・マウント方法など~
by
HommasSlide
静的サイトどこにする?
by
ogawatti
PaaSの作り方 Sqaleの場合
by
hiboma
What's hot
PPTX
ラズパイ2で動く Docker PaaSを作ってみたよ
by
npsg
PDF
Docker Swarm入門
by
Masahito Zembutsu
PPTX
Linux kernelのbspとupstream
by
wata2ki
PDF
"Programming Hive" Reading #1
by
moai kids
ODP
Raspberrypi+yocto in Yocto Workshop Japan #1
by
kazuya-nisimura
PDF
コンテナ型仮想化とはなんだったのか
by
えむ ばーど
PDF
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
by
Computational Materials Science Initiative
PDF
Nuxt.js + microCMS + netlify
by
ogawatti
PDF
Docker handson
by
koda3
PDF
Building production server on docker
by
Hiroshi Miura
ODP
Building production server on docker
by
Hiroshi Miura
PPTX
第一回コンテナ情報交換会@関西
by
Masahide Yamamoto
PPTX
OSC Tokyo fall LT~Dockerで分散処理をやってみた
by
atk1234
PDF
Capistrano
by
Yasuharu Fukuda
PDF
OpenStack + Common Lisp
by
irix_jp
PDF
VagrantユーザのためのDocker入門
by
Masashi Shinbara
PDF
Programming Hive Reading #3
by
moai kids
PDF
第1回 一撃サーバー構築シェルスクリプト勉強会
by
Yasutaka Hamada
PPT
Pgcon2012 ori-20120224
by
Manabu Ori
PDF
VarnishではじめるESI
by
Iwana Chan
ラズパイ2で動く Docker PaaSを作ってみたよ
by
npsg
Docker Swarm入門
by
Masahito Zembutsu
Linux kernelのbspとupstream
by
wata2ki
"Programming Hive" Reading #1
by
moai kids
Raspberrypi+yocto in Yocto Workshop Japan #1
by
kazuya-nisimura
コンテナ型仮想化とはなんだったのか
by
えむ ばーど
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
by
Computational Materials Science Initiative
Nuxt.js + microCMS + netlify
by
ogawatti
Docker handson
by
koda3
Building production server on docker
by
Hiroshi Miura
Building production server on docker
by
Hiroshi Miura
第一回コンテナ情報交換会@関西
by
Masahide Yamamoto
OSC Tokyo fall LT~Dockerで分散処理をやってみた
by
atk1234
Capistrano
by
Yasuharu Fukuda
OpenStack + Common Lisp
by
irix_jp
VagrantユーザのためのDocker入門
by
Masashi Shinbara
Programming Hive Reading #3
by
moai kids
第1回 一撃サーバー構築シェルスクリプト勉強会
by
Yasutaka Hamada
Pgcon2012 ori-20120224
by
Manabu Ori
VarnishではじめるESI
by
Iwana Chan
Similar to Yesod on Heroku
PPTX
node-gypを使ったネイティブモジュールの作成
by
shigeki_ohtsu
PDF
Haskell で作る競技型イベントの裏側
by
Nobutada Matsubara
PDF
バージョンアップに負けないためのプラクティス
by
Yuji Tokuda
PDF
4時間耐久 PHP on Heroku
by
Yusuke Ando
PDF
Sinatra and heroku for mac
by
Naoyuki Mitsuboshi
PDF
Node予備校 vol.1 名古屋
by
Mori Shingo
PDF
Gws 20130315 gradle_handson
by
Nobuhiro Sue
PDF
Ppl
by
Seizan Shimazaki
PPTX
start Heroku
by
Hazuki Wakabayashi
PDF
Chromium androidビルド
by
Hiroshi Sakate
PDF
Scala 初めての人が Heroku で Web アプリを公開するまで
by
Hideaki Miyake
PDF
Spring in-summer-gradle-hands on-withanswers
by
Takuma Watabiki
PDF
Yesod(at FPM2012)
by
Seizan Shimazaki
PPTX
13016 n分で作るtype scriptでnodejs
by
Takayoshi Tanaka
PDF
Heroku java
by
Kazuyuki Kawamura
PDF
Sinatraアプリをherokuにアップ
by
Hiroshi Oyamada
PDF
みんなのPython勉強会#77 パッケージングしよう
by
Atsushi Odagiri
PDF
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
by
Fuminobu Takeyama
PDF
Gradle a new Generation Build Tool
by
Shinya Mochida
PDF
すごいHaskellたのしくHeroku!
by
Haruka Nakajima
node-gypを使ったネイティブモジュールの作成
by
shigeki_ohtsu
Haskell で作る競技型イベントの裏側
by
Nobutada Matsubara
バージョンアップに負けないためのプラクティス
by
Yuji Tokuda
4時間耐久 PHP on Heroku
by
Yusuke Ando
Sinatra and heroku for mac
by
Naoyuki Mitsuboshi
Node予備校 vol.1 名古屋
by
Mori Shingo
Gws 20130315 gradle_handson
by
Nobuhiro Sue
Ppl
by
Seizan Shimazaki
start Heroku
by
Hazuki Wakabayashi
Chromium androidビルド
by
Hiroshi Sakate
Scala 初めての人が Heroku で Web アプリを公開するまで
by
Hideaki Miyake
Spring in-summer-gradle-hands on-withanswers
by
Takuma Watabiki
Yesod(at FPM2012)
by
Seizan Shimazaki
13016 n分で作るtype scriptでnodejs
by
Takayoshi Tanaka
Heroku java
by
Kazuyuki Kawamura
Sinatraアプリをherokuにアップ
by
Hiroshi Oyamada
みんなのPython勉強会#77 パッケージングしよう
by
Atsushi Odagiri
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
by
Fuminobu Takeyama
Gradle a new Generation Build Tool
by
Shinya Mochida
すごいHaskellたのしくHeroku!
by
Haruka Nakajima
Yesod on Heroku
1.
Yesod on Heroku @thimura
hontai 2012-04-22 1 / 19
2.
What is Heroku? •
PaaS (Platform as a Service) 型 • 当初は Ruby on Rails のみ • Cedar Stack の導入で Python, Java, Scala, Clojure, Node.js などに対応 • 1dyno (≒ プロセス), メモリ 300MB, PostgreSQL 5MB まで 無料 で使える • たくさんのアドオン 2 / 19
3.
Dyno
http://www.heroku.com/how • プロセスのようなもの • サーバーや VM を意識する必要なし • web, worker, clock などの Process Type • Procfile をもとに生成される yesod init した場合は deploy/Procfile に自動的に生成 • Process Type 毎に拡張可能 $ heroku ps:scale web=10 worker=2 $ heroku ps:scale web-1 worker+2 • 不安定になった Dyno は自動的に再起動される 3 / 19
4.
Slug • Slug =
Dyno の元になるオブジェクト • git push した際の hook で生成される • 言語・フレームワーク独自のファイルの有無に よって環境を識別する • 判定に失敗した場合はデプロイを拒否さ れる…… • package.json を置いておくと Node.js として 判定 4 / 19
5.
Haskell は?
5 / 19
6.
Haskell on Heroku
Celadon Cedar Stack なら Haskell アプリケーションをデプロイ可能!!! Celadon Cedar Stack • Ubuntu 10.04 LTS (lucid) (64bit) • package.json ファイルを置いておくと Node.js アプリケーションとして認識される 12.04 LTS が出た後はどうなるの……? 6 / 19
7.
Heroku gem • Heroku
gem をインストール $ gem install heroku --user-install --no-ri --no-rdoc • 公開鍵を登録 $ heroku login Enter your Heroku credentials. Email: user@example.com Password: 7 / 19
8.
Heroku で Haskell
を動かす • Node.js アプリに擬態 $ cat package.json { "name": "yesod-test", "version": "0.0.1", "dependencies": {} } • Procfile を作成 $ cat Procfile web: ./dist/build/yesod-on-heroku/yesod-on-heroku production -p $PORT 8 / 19
9.
データベースを使う • 環境変数 DATABASE_URL,
SHARED_DATABASE_URL を読んで自力で頑張る • heroku package を使う http://hackage.haskell.org/package/heroku deploy/Procfile に詳しいやりかたが 書いてあるので…… 9 / 19
10.
デプロイ • Cedar Stack
にアプリを作成 $ heroku create --stack cedar Creating strong-mist-1328... done, stack is cedar http://strong-mist-1328.herokuapp.com/ | git@heroku.com:strong-mist-1328.gi Git remote heroku added • コンパイル $ cabal configure -fproduction $ cabal build • デプロイ $ git checkout -b deploy $ git add dist/build/yesod-test/yesod-test $ git commit -m "deploy" $ git push heroku deploy:master • $ heroku open 10 / 19
11.
コンパイルする際注意すること • Ubuntu 10.04
LTS (lucid) 64bit で動作するバイ ナリを作成 • VM に lucid を入れてコンパイルするのが楽? (lucid の GHC のバージョンは 6.12.1 …… orz) • GHC はデフォルトでは…… • 可能な限り Haskell パッケージの共有ライブラリ を 利用せず静的にリンク • 実行ファイル自体は動的リンク • libyaml などのライブラリは動的リンク → 共有ライブラリが発見できない 11 / 19
12.
エラーが起きたときは • ログを確認してみる $
heroku logs 2011-11-15T17:38:20+00:00 app[web.1]: ./dist/build/yesod-test/yesod-test: error while loading shared libraries: libyaml-0.so.2: cannot open shared object file: No such file or directory 2011-11-15T17:38:20+00:00 heroku[web.1]: Process exited • リモートのシェル環境で調査 $ heroku run ldd dist/build/yesod-test/yesod-test Running ldd ./dist/build/yesod-test/yesod-test attached to terminal... up, run.37 linux-vdso.so.1 => (0x00007fffb7dff000) libz.so.1 => /lib/libz.so.1 (0x00007fe9963ba000) libyaml-0.so.2 => not found librt.so.1 => /lib/librt.so.1 (0x00007fe9961b1000) libutil.so.1 => /lib/libutil.so.1 (0x00007fe995fae000) libdl.so.2 => /lib/libdl.so.2 (0x00007fe995daa000) libgmp.so.10 => not found libffi.so.5 => not found libm.so.6 => /lib/libm.so.6 (0x00007fe995b26000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fe995908000) libc.so.6 => /lib/libc.so.6 (0x00007fe995585000) /lib64/ld-linux-x86-64.so.2 (0x00007fe9965d9000) 12 / 19
13.
解決策 • 静的リンクする • 共有ライブラリを含めてデプロイする
13 / 19
14.
解決策: 静的リンク
全てのライブラリを静的にリンク • yesod-test.cabal の ghc-options を書き換え ghc に対して -optl-pthread -optl-static フラグを指定 ... (略) executable yesod-test if flag(devel) Buildable: False if flag(production) cpp-options: -DPRODUCTION ghc-options: -Wall -threaded -O2 -optl-pthread -optl-static else ghc-options: -Wall -threaded -O0 ... (略) 14 / 19
15.
解決策: 静的リンク
問題がある物のみを静的にリンク • package.conf.d/integer-gmp-*.conf を書き換え • extra-libraries から yaml を消去 • ld-options: ”-Wl,-Bstatic” -lyaml ”-Wl,-Bdynamic” と書き換えてしまう これを $ cat /var/lib/ghc/package.conf.d/yaml-0.5.2.conf name: yaml version: 0.5.2 id: yaml-0.5.2-90d2ec65096da81d098bd329cb16d6bf ... (略) extra-libraries: yaml extra-ghci-libraries: include-dirs: includes: depends: aeson-0.6.0.1-1adff47713ff03277e972cd2e23ec8fc ... (略) hugs-options: cc-options: ld-options: framework-dirs: frameworks: haddock-interfaces: /usr/lib/ghc-doc/haddock/yaml-0.5.2/yaml.haddock haddock-html: /usr/share/doc/libghc-yaml-doc/html/ 15 / 19
16.
解決策: 静的リンク
問題がある物のみを静的にリンク • package.conf.d/integer-gmp-*.conf を書き換え • extra-libraries から yaml を消去 • ld-options: ”-Wl,-Bstatic” -lyaml ”-Wl,-Bdynamic” と書き換えてしまう こうする $ cat /var/lib/ghc/package.conf.d/yaml-0.5.2.conf name: yaml version: 0.5.2 id: yaml-0.5.2-90d2ec65096da81d098bd329cb16d6bf ... (略) extra-libraries: extra-ghci-libraries: include-dirs: includes: depends: aeson-0.6.0.1-1adff47713ff03277e972cd2e23ec8fc ... (略) hugs-options: cc-options: ld-options: "-Wl,-Bstatic" -lyaml "-Wl,-Bdynamic" framework-dirs: frameworks: haddock-interfaces: /usr/lib/ghc-doc/haddock/yaml-0.5.2/yaml.haddock haddock-html: /usr/share/doc/libghc-yaml-doc/html/ 16 / 19
17.
解決策: 共有ライブラリを含めてデプロイする •
環境変数 LD_LIBRARY_PATH を指定する • コンパイル時に -optl-Wl,-rpath,’$ORIGIN’ 等として RPATH を埋め込む 今回は LD_LIBRARY_PATH を使う方法について解説 17 / 19
18.
解決策: 共有ライブラリを含めてデプロイする •
Heroku 環境に含まれていないライブラリをコ ピーし git の管理下に libyaml, libffi, libgmp などなど • シェルスクリプト run を作成 $ cat run #!/bin/sh LD_LIBRARY_PATH=$PWD/dist/build/yesod-test ./dist/build/yesod-test/yesod-test -p $PORT -e production • Procfile を書き換え $ cat Procfile web: ./run 18 / 19
19.
まとめ? • Ruby
(heroku gem) • Ubuntu 10.04 LTS (64bit) 用にビルド • package.json を置いて Node.js アプリを擬態 • 必要な知識 : Binary Hacks 19 / 19
20.
ご静聴ありがとうございました
20 / 19
Download