Info

Posts from the Heroku Category

今日はPlayと遊んでみた。

1. Playインストール
http://www.playframework.org/
で最新版ダウンロード
適当などころに解凍してパスを通す

2. プロジェクト作成

$ play new playhub
$ run

3. heroku app 作成

$ heroku create -s cedar playhub
$ git init
$ git remote add heroku git@heroku.com:playhub.git
$ git add .
$ git commit -m init
$ git push heroku master

$ heroku open

ページが表示されてることを確認

4. プロジェクトをeclipseで開発できるようにする

$ play
[playhub] $ eclipse[info] About to create Eclipse project files for your project(s).
[info] Compiling 1 Scala source to /Users/dongriab/Desktop/playhub/target/scala-2.9.1/classes...
[info] Successfully created Eclipse project files for project(s): playhub
[playhub] $

5. eclipseからインポート

6. ScalaTodoList
http://www.playframework.org/documentation/2.0.2/ScalaTodoList
ここに書いてある通りにやるけど、どうもherokuでのpostgresqlが気に入らなくて、mysqlにしてみる。
Persist the tasks in a database
herokuでaddonのcleardbを追加。

$ heroku addons:add cleardb:ignite
$ heroku addons
cleardb:ignite
shared-database:5mb
$ heroku config

CLEARDB_DATABASE_URL確認
DATABASE_URL に postgresが書いてあるがそれをmysqlに変更

$ heroku config:add DATABASE_URL=mysql://********:*********@us-cdbr-east.cleardb.com/heroku_*******?reconnect=true

conf/application.confファイル編集

db.default=mysql
db.default.url="jdbc:mysql://us-cdbr-east.cleardb.com/heroku_***?useUnicode=true&characterEncoding=UTF8"
db.default.driver=com.mysql.jdbc.Driver
db.default.user=******
db.default.password=******
db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5
db.default.minSize=1
db.default.maxSize=9

途中でconnectionエラーとかいろいろあったけどコピーするの忘れた。

最近Scalaに興味を持つようになって、ちょっと勉強しようかと思ってherokuに hello world的なものを作ってみた。手順をメモ。
herokuに関しては割愛。

1. scala のインストール

$ brew search scala
scala      scalate
$ brew install scala
==> Downloading http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1-1.tgz
・・・
$ scala -version
Scala code runner version 2.9.1-1 -- Copyright 2002-2011, LAMP/EPFL

2. sbt インストール

$ brew install sbt

3. scala on heroku
https://devcenter.heroku.com/articles/scala
ここに書いてある通りにやる。
と、とりあえずheroku上で 「Hello from Scala!」はできた。
しかし、rubyでもないしメモ帳でscala書くちょっとあれなんでeclipseに入れてみる。
そのまま入れるとsbtのbuild.sbtで定義した依存パッケージがeclipseのビルドパスに反映されない。

4. sbtelipseを入れる
~/.sbt/pluginsにplugin.sbtを作成

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.0.0")

5. eclipse設定
プロジェクトディレクトリまで行って

$ sbt
> eclipse

参照ライブラリに依存パッケージが反映される。

6. sbtでrunしてみる

$ sbt
$ run
[error] {file:/Users/dongriab/Dropbox/Developers/cloud/heroku/workspace/scalahub/}default-2648c8/compile:run: Nonzero exit code: 1
[error] Total time: 15 s, completed Jul 14, 2012 7:06:17 PM
> run
[info] Compiling 1 Scala source to /Users/dongriab/Dropbox/Developers/cloud/heroku/workspace/scalahub/target/scala-2.8.1/classes...
[error] java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
[error] Use 'last' for the full log.

OutOfMemoryErrorが発生。
sbt起動する時にjavaヒープサイズを1024mに設定して起動

$ env JAVA_OPTS="-Xmx1024m" sbt
> run
[info] Running Web debug
Starting on port:8080
Start

問題なく起動できた。
以上で、eclipseでscala, herokuの開発できるようなった。

追加:ソース編集してサーバー再起動しないと反映されない。デバッグ方法わかる方教えてください

ずっと前からherokuがnode.jsをサポート開始したと聞いたが、なかなかやる気が出なくて試してなかった。今日やっと試してみたのでメモ。
OSXでのnode.jsの環境もこの機会でメモしとこうと。

node.jsのインストール

$ wget http://nodejs.org/dist/node-v0.4.12.tar.gz$ tar zxvf node-v0.4.12.tar.gz 
$ ./configure 
$ make
$ sudo make install

npm(node package manager)インストール

$ wget http://npmjs.org/install.sh
$ sudo ./install.sh

expressインストール

$ sudo npm install -g express
$ sudo npm install -g jade

expressアプリ作成

$ express node-js
$ node app.js
//ここでエラー。express が見つからないと
//app.jsの先頭に以下のパスを追加
require.paths.push('/usr/local/lib/node_modules');

無事に起動されてlocalhost:3000にアクセスできたら、herokuにpush。
通常のrailsのように以下のコマンドでcreate
$ heroku create

git push時に以下のエラーが発生

—–> Heroku receiving push
! Heroku push rejected, no Rails or Rack app detected

以下のコマンドで作成。heroku createとの違いはドメインは ***.heroku.comではなく、***.herokuapp.comになる。
$ heroku create –stack cedar

無事pushできてアクセスしてみると、またエラー
$ heroku logs
で見てみるとportが問題らしい。
app.jsのport設定を修正。

//app.listen(3000);
var port = process.env.PORT || 3000;
app.listen(port, function(){
     console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});

Procfile作成

web: node app.js

もう一度push。
とりあえずできた。

http://node-js.herokuapp.com

Heroku が Javaをサポートしたということで試してみた。

1. プロジェクト作成

$ mvn archetype:create -DgroupId=com.heroku.javanese -DartifactId=Javanese
$ cd Javanese
$ mvn eclipse:eclipse

eclipseにインポートして covert to maven project

2. HelloWorld.java作成

package com.heroku.javanese;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.*;

public class HelloWorld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.getWriter().print("Hello from Java!\n");
    }

    public static void main(String[] args) throws Exception{
        Server server = new Server(Integer.valueOf(System.getenv("PORT")));
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        server.setHandler(context);
        context.addServlet(new ServletHolder(new HelloWorld()),"/*");
        server.start();
        server.join();  
    }
}

3. pomファイル修正

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.heroku.javanese</groupId>
	<artifactId>Javanese</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Javanese</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>7.4.5.v20110725</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<version>1.1.1</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>assemble</goal>
						</goals>
						<configuration>
							<assembleDirectory>target</assembleDirectory>
							<generateRepository>false</generateRepository>
							<programs>
								<program>
									<mainClass>com.heroku.javanese.HelloWorld</mainClass>
									<name>webapp</name>
								</program>
							</programs>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

4. .gitignore ファイル作成

$ echo "target" > .gitignore

5. いろいろ設定

$ mvn install

プロジェクトルートに Procfile ファイル作成

web: sh target/bin/webapp

環境変数 REPO に .m2/repository 設定

$ export REPO=$HOME/.m2/repository

foreman インストール、起動

$ sudo gem install foreman
$ foreman start

6. ローカルアクセスしてみる。
http://localhost:5000/

7. heroku に deploy

$ git init
$ git add .
$ git commit -m "init"
$ heroku create --stack cedar
$ git push heroku master

# heroku.com でプロジェクト名変更
$ git remote rm heroku
$ git remote add heroku git@heroku.com:javanese.git
$ git push heroku master

8. できた〜
http://javanese.heroku.com