完全にQiitaの使い方間違ってるけど、まあプログラマが集まる場所ならここよりもQiitaだ!w
2014/09/17
2014/09/09
Nitrous.IO
Nitrous.IO
Rubyの勉強しようと思っていろいろ見てたんだけど、このNitrous.IOというサイトが面白かった!
クラウド環境でWebアプリの開発が出来るんだけど、Webブラウザで使えるIDEがついているのね。
とりあえずRailsのサーバーを立てるところまでやってみようと!
まずはログインしてダッシュボードへ
「New Box」ボタンでBoxと言うものを作成する。
Box作成画面。
言語は「Ruby/Rails」「Node.js」「Python/Django」「Go」「PHP」の5つから選べて(Scala出ないかなw)、MemoryとStorageのスペック設定では「N2O(単位:雷マーク)」というのを使って、サーバースペックを設定できる。
N2O初期値は140雷で、Memoryのデフォルトが384MBで120雷、Storageのデフォルト1000MBで20雷。
この「N2O」は課金して増やすこともできるし、TwitterやらGithub連携しても(すこしだけ)増やすことができる。
僕はいろいろやって215雷まで増やせた
Memoryの設定に必要なN2Oは128MBごとに40雷必要で、最大2GB(2048MB)だと640雷になる。
ファイル名に「HelloWorld.rb」と入力してファイル作成。
作成した「HelloWorld.rb」を選択すると、右ペインでソースが開くので
RubyのHelloWorldを書く。
ソースの保存は「Ctrl+S」で出来たりと直感的。
ちなみにソース内容はこんな感じw
---
#!/usr/bin/env ruby
puts "Hello World"
---
下部コンソールで、作成したHelloWorld.rbを指定してRuby実行。
おお、出来た。
ポート:3000番と言われているので、
上部の「Preview」から「Port 3000」を選択すれば、
別ウィンドウでWebページが作成される。
Rubyの勉強しようと思っていろいろ見てたんだけど、このNitrous.IOというサイトが面白かった!
クラウド環境でWebアプリの開発が出来るんだけど、Webブラウザで使えるIDEがついているのね。
とりあえずRailsのサーバーを立てるところまでやってみようと!
まずはログインしてダッシュボードへ
「New Box」ボタンでBoxと言うものを作成する。
Box作成画面。
言語は「Ruby/Rails」「Node.js」「Python/Django」「Go」「PHP」の5つから選べて(Scala出ないかなw)、MemoryとStorageのスペック設定では「N2O(単位:雷マーク)」というのを使って、サーバースペックを設定できる。
N2O初期値は140雷で、Memoryのデフォルトが384MBで120雷、Storageのデフォルト1000MBで20雷。
この「N2O」は課金して増やすこともできるし、TwitterやらGithub連携しても(すこしだけ)増やすことができる。
僕はいろいろやって215雷まで増やせた
Strageの設定に必要なN2Oは250MBごとに5雷必要で、こちらは最大20GB程度で400N2O。
まあ、明らかにオーバースペックだけどw
とりあえずこんな設定でBoxを作ってみる
「Create Box」をクリックすると、タコメータが回りだす。
Nitrousって言うだけあって、車好きが作ってるんかな。
Boxが完成すると、下記の様なWebIDEが立ち上がる。
なかなか良いではないか。
ペインも直感的?ソースツリーとソースと下部にコンソールがあって、コンソールは全部は試してないけどLinuxコマンドがおおよそ使えるっぽい(たぶん)。
HelloWorld
じゃあ、試しにRubyのHelloWorldを作ってみる。
まず、デフォルトで作成されている「workspace」ディレクトリを右クリックして、「New File」を選択。
作成した「HelloWorld.rb」を選択すると、右ペインでソースが開くので
RubyのHelloWorldを書く。
ソースの保存は「Ctrl+S」で出来たりと直感的。
ちなみにソース内容はこんな感じw
---
#!/usr/bin/env ruby
puts "Hello World"
---
下部コンソールで、作成したHelloWorld.rbを指定してRuby実行。
おお、出来た。
Rubyのバージョンは2.1.1p76らしい
---
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
---
Rails
もちろんBox作成時にRuby on Railsをテンプレートに指定したので、Railsコマンドも打てる。
action@omiend-ruby-helloworld-144513:~/workspace$ cd ~
action@omiend-ruby-helloworld-144513:~$ rails new HelloWorld
~割愛~
run bundle install
~割愛~
* bin/rails: spring inserted
action@omiend-ruby-helloworld-144513:~$
ビルドが完了した後、ソースツリーの再読み込みマークをクリックすると、Railsのプロジェクトが表示されれる。
作成されたRailsプロジェクトに移動して、「rails server」すればサーバーが稼働する。
ポート:3000番と言われているので、
上部の「Preview」から「Port 3000」を選択すれば、
別ウィンドウでWebページが作成される。
あとは、ScaffoldでCRUD作成したりを試したけど、全く問題なさそう。
(といってもRuby on Rails自体詳しくないから、開発する上でどっかつまりそうな気はするけど)
action@omiend-ruby-helloworld-144513:~/helloworld$ rails generate scaffold user name:string
action@omiend-ruby-helloworld-144513:~/helloworld$ rake db:create
action@omiend-ruby-helloworld-144513:~/helloworld$ rake db:migrate
それから、今試しているのはここで作ったソースをGithubにPush出来たり?するっぽい。
...んだけど、まだそこまでやってない~。しばらくこのNitrous.IOで遊ぼうかなw
2014/04/06
Playframework2→Bitbucket→HerokuのデプロイをCodeshipを利用して実現
「読まれるにたるものを書くか、書かれるにたることをしろ」 – ベンジャミン・フランクリン
いやー、無理っす。でも、書く事で自分の中に根付くという感じがするので、今日も覚えた事を書く笑
Play使ってちまちまWebアプリを作っていて、Heroku上で動かそうと思ってる。
たまにHeroku上で動作確認したくなる。でもソース管理はBitbucketを使いたいと思ってる。
だから、BitbucketとHerokuの両方にPushしないと行けないのがめんどくさくなって、なんか良い方法無いのかと思ってちょっと調べてみた。
そしたら、Codeshipというのが面白そうだったのでやってみた。
タイトルはカッコ良く「〜実現」とか書いてあるんだけど、Codeshipの設定をして上げるだけで良いのでめっちゃ簡単でした。
今回myappというPlayアプリを使って、Bitbucketにpush→Codeship経由でHerokuにデプロイとうのをやってみまーす。
はい、オッケーでーす。
Bitbucketを利用する上で、SSH設定やなんかはやっておきましょう。
はい、オッケーでーす。
はい、オッケーでーす。
はい、オッケーでーす。
Create a new Projectする。
Bitbucketを選択。Githubもあるので、同じ手順でGithubからも出来ると思う。
僕はシャイな人間なので、プライベートリポジトリーがただで使えるBitbucketをいつもつかってマンモス。
CodeshipからBitbucketにログインしておけば、このように先ほど作成したBitbucketのリポジトリーが選択出来る。これを選択。
次が結構キモかな?Testの設定。
Select your technology to prepopulate basic commands:PlayってかScalaはJVM上で動くので、「Java」を選択。
Modify your Setup Commands:「bundle install」とか書いてあるので、Railsで使うんでしょう。この辺りの細かい設定は後で試してみる。(まあ書いてある通りなんだけど笑)
Modify your Test Commands:ここでコメントアウトされている「sbt test」を有効化しておく。
「play test」コマンドが出来ないからどうしようと思ってたけど、良く見たらsbt testで良かった。そりゃそうだ。sbt最高。
そしたらこんな画面が出るので、「Follow this link and add the url below as 'POST' hook to your repository:」をコピーしておく。
続いてHerokuの設定。
Project SettingsのDeploymentから、Herokuを選択し、Application Name(Heroku)とAPI Key(Heroku)を設定して保存。
ここら辺でDBのmigrate設定とか出来ると思うけど、取りあえず保留。
Bitbucketのリポジトリー設定からフックの設定を行う。
ドロップダウンから「POST」を選択し、URLに、Codeshipで取得したBitbucket push hookのURLを設定して保存。
ここまでCodeshipの設定が完了したら、Bitbucketに改めてpush。
ソースは適当に更新したものとしておきマンモス。
Pushが成功すると、CodeshipのDashbordでインテグレーションの様子が確認出来る。
sbt test も回ってるのが分かる。このテストが成功すれば、自動的にHerokuにもPushされるハズ。
完了したのがこちら。
やや時間かかってるけど、まあこんな物か。
BitbucketにPushして、Codeshipでテスト実行し、エラーだったらHerokuへのデプロイが行われない事を確認してみる。
なので、わざとテストが失敗するケースを追加。
myapp/test/ApplicationSpec.scala
試しにsbt testして、エラーになる事を確認。
BitbucketにPushする。
Codeshipで監視。
無事、エラーになってストップしました。いい感じ。
エラーでデプロイがこけた場合、こんな感じでメールくれます。
素晴らしい。実用出来るね。
いやー、無理っす。でも、書く事で自分の中に根付くという感じがするので、今日も覚えた事を書く笑
Play使ってちまちまWebアプリを作っていて、Heroku上で動かそうと思ってる。
たまにHeroku上で動作確認したくなる。でもソース管理はBitbucketを使いたいと思ってる。
だから、BitbucketとHerokuの両方にPushしないと行けないのがめんどくさくなって、なんか良い方法無いのかと思ってちょっと調べてみた。
そしたら、Codeshipというのが面白そうだったのでやってみた。
タイトルはカッコ良く「〜実現」とか書いてあるんだけど、Codeshipの設定をして上げるだけで良いのでめっちゃ簡単でした。
今回myappというPlayアプリを使って、Bitbucketにpush→Codeship経由でHerokuにデプロイとうのをやってみまーす。
Play App作成
$ play new myapp $ play run
はい、オッケーでーす。
Bitbucketにリポジトリを作成
Bitbucketを利用する上で、SSH設定やなんかはやっておきましょう。
どうでもいいけど、言語を選択するときに「Scala」が出てこないサービスはどうかと思うんだ。ナントカナビとかw
はい、オッケーでーす。
Bitbucketにプッシュ
$ git init $ git add . $ git commit -m "MyApp初回コミット" $ git remote add origin git@bitbucket.org:omiend/myapp.git $ git push -u origin --all
はい、オッケーでーす。
Herokuのアプリケーション作成
とりあえずこんな感じで。いつもはHeroku Toolbeltから作成していたんだけど、まあ今回は画面からアプリを作成。はい、オッケーでーす。
Codeshipの設定
いよいよ今回のメイン、Codeshipの設定。Sign upやらなんやらはてきとうに済ませておく。Create a new Projectする。
Bitbucketを選択。Githubもあるので、同じ手順でGithubからも出来ると思う。
僕はシャイな人間なので、プライベートリポジトリーがただで使えるBitbucketをいつもつかってマンモス。
CodeshipからBitbucketにログインしておけば、このように先ほど作成したBitbucketのリポジトリーが選択出来る。これを選択。
次が結構キモかな?Testの設定。
Select your technology to prepopulate basic commands:PlayってかScalaはJVM上で動くので、「Java」を選択。
Modify your Setup Commands:「bundle install」とか書いてあるので、Railsで使うんでしょう。この辺りの細かい設定は後で試してみる。(まあ書いてある通りなんだけど笑)
Modify your Test Commands:ここでコメントアウトされている「sbt test」を有効化しておく。
「play test」コマンドが出来ないからどうしようと思ってたけど、良く見たらsbt testで良かった。そりゃそうだ。sbt最高。
そしたらこんな画面が出るので、「Follow this link and add the url below as 'POST' hook to your repository:」をコピーしておく。
続いてHerokuの設定。
Project SettingsのDeploymentから、Herokuを選択し、Application Name(Heroku)とAPI Key(Heroku)を設定して保存。
ここら辺でDBのmigrate設定とか出来ると思うけど、取りあえず保留。
Bitbucketのフック設定
Bitbucketのリポジトリー設定からフックの設定を行う。
ドロップダウンから「POST」を選択し、URLに、Codeshipで取得したBitbucket push hookのURLを設定して保存。
BitbucketにPush
ここまでCodeshipの設定が完了したら、Bitbucketに改めてpush。
ソースは適当に更新したものとしておきマンモス。
Pushが成功すると、CodeshipのDashbordでインテグレーションの様子が確認出来る。
sbt test も回ってるのが分かる。このテストが成功すれば、自動的にHerokuにもPushされるハズ。
完了したのがこちら。
やや時間かかってるけど、まあこんな物か。
Herokuの確認
ok。(Procfile作るの忘れたのでこんな画面)テストが失敗するケース
BitbucketにPushして、Codeshipでテスト実行し、エラーだったらHerokuへのデプロイが行われない事を確認してみる。
なので、わざとテストが失敗するケースを追加。
myapp/test/ApplicationSpec.scala
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
import play.api.test._
import play.api.test.Helpers._
/**
* Add your spec here.
* You can mock out a whole application including requests, plugins etc.
* For more information, consult the wiki.
*/
@RunWith(classOf[JUnitRunner])
class ApplicationSpec extends Specification {
"Application" should {
"send 404 on a bad request" in new WithApplication{
route(FakeRequest(GET, "/boum")) must beNone
}
"render the index page" in new WithApplication{
val home = route(FakeRequest(GET, "/")).get
status(home) must equalTo(OK)
contentType(home) must beSome.which(_ == "text/html")
contentAsString(home) must contain ("Your new application is ready.")
}
"わざとテストNGになるケース" in new WithApplication{
val home = route(FakeRequest(GET, "/hoge")).get
status(home) must equalTo(OK)
contentType(home) must beSome.which(_ == "text/html")
contentAsString(home) must contain ("Your new application is ready.")
}
}
}
試しにsbt testして、エラーになる事を確認。
$ sbt test [info] Loading project definition from /Users/myapp/project [info] Set current project to myapp (in build file:/Users/myapp/) [info] Compiling 1 Scala source to /Users/myapp/target/scala-2.10/classes... [info] Compiling 1 Scala source to /Users/myapp/target/scala-2.10/test-classes... [info] IntegrationSpec [info] Application should [info] + work from within a browser [info] Total for specification IntegrationSpec [info] Finished in 8 seconds, 325 ms [info] 1 example, 0 failure, 0 error [info] ApplicationSpec [info] Application should [info] + send 404 on a bad request [info] + render the index page [info] ! わざとテストNGになるケース [error] NoSuchElementException: None.get (ApplicationSpec.scala:31) [error] ApplicationSpec$$anonfun$3$$anonfun$apply$6$$anon$3$delayedInit$body.apply(ApplicationSpec.scala:31) [error] play.api.test.WithApplication$$anonfun$around$1.apply(Specs.scala:20) [error] play.api.test.WithApplication$$anonfun$around$1.apply(Specs.scala:20) [error] play.api.test.PlayRunners$class.running(Helpers.scala:45) [error] play.api.test.Helpers$.running(Helpers.scala:364) [error] play.api.test.WithApplication.around(Specs.scala:20) [error] play.api.test.WithApplication.delayedInit(Specs.scala:17) [error] ApplicationSpec$$anonfun$3$$anonfun$apply$6$$anon$3.(ApplicationSpec.scala:30) [error] ApplicationSpec$$anonfun$3$$anonfun$apply$6.apply(ApplicationSpec.scala:30) [error] ApplicationSpec$$anonfun$3$$anonfun$apply$6.apply(ApplicationSpec.scala:30) [info] Total for specification ApplicationSpec [info] Finished in 805 ms [info] 3 examples, 0 failure, 1 error [error] Error: Total 4, Failed 0, Errors 1, Passed 3 [error] Error during tests: [error] ApplicationSpec [error] (test:test) sbt.TestsFailedException: Tests unsuccessful [error] Total time: 34 s, completed 2014/04/06 14:39:36
BitbucketにPushする。
Codeshipで監視。
無事、エラーになってストップしました。いい感じ。
エラーでデプロイがこけた場合、こんな感じでメールくれます。
素晴らしい。実用出来るね。
2014/03/02
MavericksにしたらHomebrewのアプリが軒並み使えなくなったので
いろいろやっておいた
取りあえずXCodeとコマンドラインツールをアップデート。
さらに
/usr/local
/usr/local/bin
の権限とグループが755のwheelになっていたので
取りあえずXCodeとコマンドラインツールをアップデート。
さらに
/usr/local
/usr/local/bin
の権限とグループが755のwheelになっていたので
$ sudo chgrp staff /usr/local $ sudo chmod 775 /usr/local $ sudo chgrp staff /usr/local/bin $ sudo chmod 775 /usr/local/bin
後はbrew uninstallで一旦すべて削除して、brew installで入れ直し
でもなんか気持ち悪いというか、環境が汚れていくようでいやだ〜
2014/02/26
Scalajsちょっとだけ試してみた
むむむ、最近Scala界隈でやたらバズってるので試してみたけど、ムムム
なにかっていうと、Scalaで書いたソースをJavascriptのソースにコンパイルするんだとか。
取りあえず、下記を参考にさせてもらい、やってみる。
Scala.jsが凄い − mizchi's blog
まずはサンプルプロジェクトをお借りする。
そしてコンパイルがこんな感じらしい。
そしたら下記ファイルを開いてみる。
太文字で「It works!」と表示されたらコンパイル成功。
そして下記がコンパイル元のScalaソース。
scala-js-example-app/src/main/scala/example/ScalaJSExample.scala
このあとどうしようかw
なにかっていうと、Scalaで書いたソースをJavascriptのソースにコンパイルするんだとか。
取りあえず、下記を参考にさせてもらい、やってみる。
Scala.jsが凄い − mizchi's blog
まずはサンプルプロジェクトをお借りする。
$ git clone https://github.com/sjrd/scala-js-example-app $ cd scala-js-example-app
そしてコンパイルがこんな感じらしい。
$ sbt $ sbt packageJS
そしたら下記ファイルを開いてみる。
太文字で「It works!」と表示されたらコンパイル成功。
そして下記がコンパイル元のScalaソース。
scala-js-example-app/src/main/scala/example/ScalaJSExample.scala
package example
import scala.scalajs.js
import js.Dynamic.{ global => g }
object ScalaJSExample {
def main(): Unit = {
val paragraph = g.document.createElement("p")
paragraph.innerHTML = "<strong>It works!</strong>"
g.document.getElementById("playground").appendChild(paragraph)
}
/** Computes the square of an integer.
* This demonstrates unit testing.
*/
def square(x: Int): Int = x*x
}
このあとどうしようかw
2014/02/23
【リベンジ】PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ
前回「PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ」なんてのをやったんだけど、結局稼働せず。。。
それから暫くHerokuの勉強を中心に頑張ってて、やっと原因らしいものが判明。
Playframeworkは2.2.1を利用しているのだけど、2.2からはProcfileの書き方が変わったそうで
前は
とか書いてたんだけど、今は
あと、{JAVA_OPTS}は書かなくて良いらしい。
アプリを作成してからHerokuにデプロイするまでのコマンドはこんな感じ。
まずgitの初期化。
Herokuの設定と、ClearDBのインストール、さらにClearDBのエンドポイントを確認し、HerokuのDB設定に setする。
そしたらPlayのapplication.confファイルにDB設定を追加。
conf/application.conf
gitのコミットと、プッシュ(=デプロイ)
これでok。
ちなみにheroku createするとgitの設定も書き換えてくれてるっぽい。
それから暫くHerokuの勉強を中心に頑張ってて、やっと原因らしいものが判明。
Playframeworkは2.2.1を利用しているのだけど、2.2からはProcfileの書き方が変わったそうで
前は
web: target/start -Dhttp.port=${PORT} {JAVA_OPTS} -Ddb.default.url=${DATABASE_URL}
とか書いてたんだけど、今は
web: target/universal/stage/bin/my_apprication -Dhttp.port=${PORT} -Ddb.default.url=${DATABASE_URL}
って書かなきゃ行けないみたい。「my_apprication」はアプリケーション名で、スネーク型で書けとのこと。あと、{JAVA_OPTS}は書かなくて良いらしい。
アプリを作成してからHerokuにデプロイするまでのコマンドはこんな感じ。
まずgitの初期化。
$ git init $ git add .
Herokuの設定と、ClearDBのインストール、さらにClearDBのエンドポイントを確認し、HerokuのDB設定に setする。
$ heroku create my-apprication$ heroku addons:add clear $ heroku config === my-apprication Config Vars CLEARDB_DATABASE_URL: mysql://ユーザー:パスワード@us-cdbr-east-05.cleardb.net/データベース名?reconnect=true $ heroku config:set DATABASE_URL='mysql://ユーザー:パスワード@us-cdbr-east-05.cleardb.net/データベース名?reconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8'
そしたらPlayのapplication.confファイルにDB設定を追加。
conf/application.conf
db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://us-cdbr-east-05.cleardb.net:3306/データベース名?reconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8" db.default.user=ユーザー db.default.password="パスワード" # 下記はClearDBをミニマムで利用する際の設定で、まだ詳細はしらべてないけど、まあ書いてある通りですね db.default.partitionCount=1 db.default.maxConnectionsPerPartition=5 db.default.minConnectionsPerPartition=5
gitのコミットと、プッシュ(=デプロイ)
git commit -m "初回コミット" git push heroku master
これでok。
ちなみにheroku createするとgitの設定も書き換えてくれてるっぽい。
$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = false [remote "heroku"] url = git@heroku.com:my-apprication.git fetch = +refs/heads/*:refs/remotes/heroku/* [branch "master"] remote = heroku merge = refs/heads/master
2014/02/22
Playfrmaework2.2.1で変なエラーが[IllegalStateException: JSR-303 validated property ...
Playfrmaework2.2.1つかってて、DBにアクセス時下記の謎エラーが。
アクセサが無い?
ん?
下記をしてみたら治った。謎。
どうやらPlayではgetterとsetterを自動的に作成するとかなんとかで、何らかの理由で作成されてなかったとかなんとかで、play clean-allでsbtのキャッシュをクリアしてあげるとかなんとか? たぶん色々間違ってるけどとりあえず放置。
アクセサが無い?
ん?
[IllegalStateException: JSR-303 validated property 'name' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access)]
// @LINE:11
case controllers_Application_updateParent4(params) => {
call(params.fromQuery[Int]("p", Some(1)), params.fromQuery[Long]("id", None)) { (p, id) =>
invokeHandler(controllers.Application.updateParent(p, id), HandlerDef(this, "controllers.Application", "updateParent", Seq(classOf[Int], classOf[Long]),"POST", """""", Routes.prefix + """updateParent"""))
}
}
// @LINE:12
下記をしてみたら治った。謎。
$ play clean-all [info] Done! $ play run
どうやらPlayではgetterとsetterを自動的に作成するとかなんとかで、何らかの理由で作成されてなかったとかなんとかで、play clean-allでsbtのキャッシュをクリアしてあげるとかなんとか? たぶん色々間違ってるけどとりあえず放置。
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」 from Yoshimura Soichiro
実は個人的にPlay2/ScalaでWebアプリを作っているのだけど、周りにそんなことやってる人がいないので一人(というか独り)で暗闇を走ってる感があったんだよね。
Scalaなんて社内でやってる人ほとんどいないし。
でも、まったく同じ構成(DBもMySQLだし)でこれだけ大規模のシステムを作ったという事例は、とても励みになる。
Scalaなんて社内でやってる人ほとんどいないし。
でも、まったく同じ構成(DBもMySQLだし)でこれだけ大規模のシステムを作ったという事例は、とても励みになる。
2014/02/02
PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ
前にやった事あったけど忘れてしまっているのと、そのときちゃんとしたメモも取っていなかったので、改めて。
それからは勉強がてら、最低限CRUD機能+親テーブルと子テーブルのを兼ね備えていることを前提としてPlayframworkを勉強。
出来上がったアプリは、上記に併せてページング機能もあり、地味にめんどくさいロジックを組んでいるので、そこだけ我ながらの力作。
今回はこのJava版のアプリをHerokuにデプロイするメモ。
DBについては、ローカルでは普段MySQLを使っているので、Heroku上ではClearDB(MySQLに似ているSaaSのDB)を使う。
実は、今はScalaでも同じものを作っていたりする。
(ちなみに作り途中のScala版は「crud_scala」だったりして)
下記のHerokuコマンドでログイン。
Herokuにログインすると、今作成したアプリが見れる。
「アプリを選択 > Settings > Name」で名前を変更。
(「glacial-scrubland-3010」→「playframwork-crud-java」と変更)
ローカルのgit設定も変更。
一応両方やってみたけど、ローカルからの変更だけで良いっぽい?
こんな感じ。
※{パスワード}の所はマスキング
ついでに、これらの情報を元にSequel Proとかでログインし、DatabaseやTableを作成しておく。
conf/application.confのDB設定の所を、上記「ClearDBのエンドポイントを確認」で確認した内容を
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://us-cdbr-east-05.cleardb.net:3306/heroku_c6bbbbd45a76b45?characterEncoding=UTF8"
db.default.user=b1ecc59f0e6fb8
db.default.password="{パスワード}"
db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5
下の3行は、ClearDBの無料版を利用する際に必要な設定。
参考
一言多いプログラマーの独り言 ー Herokuで、Java Play framework 2.0 + cleardb を利用すると c.j.b.h.AbstractConnectionHook のエラー
プロジェクトのルートディレクトリに、Herokuで使う為の「Procfile」と言う物を作成。
【Procfile】
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyEvolutions.default=true
アプリケーション稼働
下記コマンドを実行すると、ブラウザが起動して勝手にアプリケーションを開いてくれる。
前はこれで出来たんだけど、変なエラーが...。
ログを見ても的を射ない。
今日は諦めて、ディアブロしよーっとww
アプリについて
Strutsはもう時代遅れなのかなと感じ始め、じゃあ今Javaで作るWebアプリって何が良いのかな?と調べた結果、良いか悪いかは別として、Scalaでも作れるPlayframworkに興味を持ち。それからは勉強がてら、最低限CRUD機能+親テーブルと子テーブルのを兼ね備えていることを前提としてPlayframworkを勉強。
出来上がったアプリは、上記に併せてページング機能もあり、地味にめんどくさいロジックを組んでいるので、そこだけ我ながらの力作。
CSSはTwitterBoostrupを利用。とはいえ、今回は機能周りの勉強だったので、デザインは適当なんだけど。
DBについては、ローカルでは普段MySQLを使っているので、Heroku上ではClearDB(MySQLに似ているSaaSのDB)を使う。
実は、今はScalaでも同じものを作っていたりする。
HerokuのToolbelt
下記からHeroku Toolbeltをインストールしておく。
本当はHomebrewでインストールしたかったんだけど、上手く動かないので中止。
Herokuにログイン
さて、取りあえずディレクトリに移動。アプリ名は「crud_java」。(ちなみに作り途中のScala版は「crud_scala」だったりして)
$ pwd crud_java/
下記のHerokuコマンドでログイン。
$ heroku login Enter your Heroku credentials. Email: メールアドレス Password (typing will be hidden): Authentication successful.
Herokuのアプリケーション作成
下記コマンドでアプリケーションを作成する。$ heroku create Creating glacial-scrubland-3010... done, stack is cedar http://glacial-scrubland-3010.herokuapp.com/ | git@heroku.com:glacial-scrubland-3010.git
Herokuにログインすると、今作成したアプリが見れる。
Herokuのアプリケーションをリネーム
「アプリを選択 > Settings > Name」で名前を変更。
(「glacial-scrubland-3010」→「playframwork-crud-java」と変更)
ローカルのgit設定も変更。
$ heroku rename playframwork-crud-java Renaming playframwork-crud-java to playframwork-crud-java... done http://playframwork-crud-java.herokuapp.com/ | git@heroku.com:playframwork-crud-java.git Git remote heroku updated
一応両方やってみたけど、ローカルからの変更だけで良いっぽい?
ClearDBをインストール
下記コマンドでインストール。らくちん。$ heroku addons:add cleardb Adding cleardb on playframwork-crud-java... done, v3 (free) Use `heroku addons:docs cleardb` to view documentation.
こんな感じ。
ClearDBのエンドポイントを確認
下記コマンドでエンドポイントを確認。※{パスワード}の所はマスキング
$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL: mysql://b1ecc59f0e6fb8:{パスワード}@us-cdbr-east-05.cleardb.net/heroku_c6bbbbd45a76b45?reconnect=true
ついでに、これらの情報を元にSequel Proとかでログインし、DatabaseやTableを作成しておく。
PlayのConfigを設定
conf/application.confのDB設定の所を、上記「ClearDBのエンドポイントを確認」で確認した内容を
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://us-cdbr-east-05.cleardb.net:3306/heroku_c6bbbbd45a76b45?characterEncoding=UTF8"
db.default.user=b1ecc59f0e6fb8
db.default.password="{パスワード}"
db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5
下の3行は、ClearDBの無料版を利用する際に必要な設定。
参考
一言多いプログラマーの独り言 ー Herokuで、Java Play framework 2.0 + cleardb を利用すると c.j.b.h.AbstractConnectionHook のエラー
Procfile作成
プロジェクトのルートディレクトリに、Herokuで使う為の「Procfile」と言う物を作成。
【Procfile】
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyEvolutions.default=true
Herokuへデプロイ
下記コマンドでデプロイを実行。$ git push heroku master
アプリケーション稼働
下記コマンドを実行すると、ブラウザが起動して勝手にアプリケーションを開いてくれる。
$ heroku open
前はこれで出来たんだけど、変なエラーが...。
$ heroku logs 2014-02-02T06:40:24.702110+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=playframwork-crud-java.herokuapp.com request_id=27b4f1e1-e61d-4c3a-b3b2-15a0dfcacda3 fwd="122.17.154.11" dyno= connect= service= status=503 bytes=
ログを見ても的を射ない。
今日は諦めて、ディアブロしよーっとww
登録:
投稿 (Atom)



















































