LoginSignup
3
2

More than 5 years have passed since last update.

SAStrutsのプロジェクトをHerokuにデプロイする

Last updated at Posted at 2016-03-05

SAStrutsのプロジェクトをHerokuにデプロイする上でいくつか嵌った点を。
参考:Heroku/Cedar上でSAStruts+S2JDBCを動かす
基本的には上記URLを参考にしながら進めました。

  • データベース設定変更
    MySQL(ClearDB)を利用する場合
import java.net.URI;
import java.net.URISyntaxException;
public class HerokuEnvironmentHelper {

    private static HerokuEnvironmentHelper instance;

    public static HerokuEnvironmentHelper getInstance()
            throws URISyntaxException {
        if (instance == null) {
            instance = new HerokuEnvironmentHelper();
        }
        return instance;
    }

    private URI DB_URI;
    private static final String DB_URI_ENV_NAME = "CLEARDB_DATABASE_URL";

    private HerokuEnvironmentHelper() throws URISyntaxException {
        DB_URI = new URI(System.getenv(DB_URI_ENV_NAME));
    }

    public String getUrl() {
        return "jdbc:mysql://" + DB_URI.getHost() + DB_URI.getPath();
    }

    public String getUsername() {
        return DB_URI.getUserInfo().split(":")[0];
    }

    public String getPassword() {
        return DB_URI.getUserInfo().split(":")[1];
    }

}

これが曲者でした。

private static final String DB_URI_ENV_NAME = "CLEARDB_DATABASE_URL";

最初は例の通りDATABASE_URLにしていましたが、デプロイしてもタイムアウトでエラーを吐くのでデバッグしてみたら、デフォルトのpostgresに接続しようとしていましたw

  • 依存jar pom.xmlにjettyの追加の他にmysqlの依存も追加します。
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

私の環境では5.1.7を使っていますが、Mavenにないのでpush rejectされますw
仕方ないので5.1.6を使います。

  • web.xml
    web.xmlからrequestDumpFilter関係の2項目をコメントアウトします。
<!--
    <filter>
        <filter-name>requestDumpFilter</filter-name>
        <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
    </filter>
    -->
<!--
    <filter-mapping>
        <filter-name>requestDumpFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    -->
  • Herokuへのアップロード
git init
git add .
git commit -m 'init'
git push heroku master
#プロセスが起動しているか確認
heroku ps
#起動していない場合
heroku ps:scale web=1
#ログの確認
heroku logs
  • DBのリストア
heroku config --app <<アプリ名>>
#カレントディレクトリの位置を確認してからリストア
mysql --user=ユーザ名 --password=パスワード --host=サーバ名 データベース < dump.sql
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2