2

まず最初に簡単な概要を説明します。heroku で実行されている iPhone アプリと Java PLay(2.1.1) フレームワーク アプリケーションがあり、アップロードされた画像を保存するために Amazon S3 もあります。基本的に、iPhoneアプリは画像をJavaアプリに送信し、アップロードするとS3に転送され、アップロードされた画像を表示できるページがあります。

ここでの問題は、最初にアプリケーションをデプロイしたときにすべてが正常に機能することですが、数日後に S3 への接続が失敗したように見え、内部サーバー エラーが発生するだけです。

@6ekb4bp0a - Internal server error, for (GET) [/view/51c0b5d3e4b082764a289889] ->
2013-06-20T08:59:39.318089+00:00 app[web.1]: 
2013-06-20T08:59:38.727484+00:00 heroku[router]: at=info method=GET path=/view/51c0b5d3e4b082764a289889 host=myapp.co.uk fwd="---.---.---.--" dyno=web. connect=1ms service=27ms status=500 bytes=1941
2013-06-20T08:59:39.422984+00:00 app[web.1]: play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager: method <init>()V not found]]
2013-06-20T08:59:39.523670+00:00 app[web.1]:    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:39.621627+00:00 app[web.1]:    at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:39.722105+00:00 app[web.1]:    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:144) [play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:39.819446+00:00 app[web.1]:    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:140) [play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:39.916774+00:00 app[web.1]:    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10-        2.1.1.jar:2.1.1]
2013-06-20T08:59:40.015921+00:00 app[web.1]:    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:40.113516+00:00 app[web.1]: java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager: method <init>()V not found
2013-06-20T08:59:40.211257+00:00 app[web.1]:    at play.mvc.Security$AuthenticatedAction.call(Security.java:47) ~[play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:40.317848+00:00 app[web.1]:    at play.core.j.JavaAction$$anon$2.apply(JavaAction.scala:74) ~[play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:40.416593+00:00 app[web.1]:    at play.core.j.JavaAction$$anon$2.apply(JavaAction.scala:73) ~[play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:40.514600+00:00 app[web.1]:    at play.libs.F$Promise$PromiseActor.onReceive(F.java:420) ~[play_2.10-2.1.1.jar:2.1.1]
2013-06-20T08:59:40.612653+00:00 app[web.1]:    at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:159) ~[akka-actor_2.10-2.1.0.jar:na]
2013-06-20T08:59:40.710218+00:00 app[web.1]:    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425) ~[akka-actor_2.10-2.1.0.jar:na]
2013-06-20T08:59:40.809756+00:00 app[web.1]: Caused by: java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager: method <init>()V not found
2013-06-20T08:59:40.907239+00:00 app[web.1]:    at com.amazonaws.http.ConnectionManagerFactory.createThreadSafeClientConnManager(ConnectionManagerFactory.java:26) ~[aws-java-sdk-1.4.2.1.jar:na]
2013-06-20T08:59:41.006986+00:00 app[web.1]:    at com.amazonaws.http.HttpClientFactory.createHttpClient(HttpClientFactory.java:95) ~[aws-java-sdk-1.4.2.1.jar:na]
2013-06-20T08:59:41.104293+00:00 app[web.1]:    at com.amazonaws.http.AmazonHttpClient.<init>(AmazonHttpClient.java:118) ~[aws-java-sdk-1.4.2.1.jar:na]
2013-06-20T08:59:41.204123+00:00 app[web.1]:    at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:65) ~[aws-java-sdk-1.4.2.1.jar:na]
2013-06-20T08:59:41.302700+00:00 app[web.1]:    at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:298) ~[aws-java-sdk-1.4.2.1.jar:na]
2013-06-20T08:59:41.409163+00:00 app[web.1]:    at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:280) ~[aws-java-sdk-1.4.2.1.jar:na]

これは、このコードを使用して S3 から画像を取得しようとしているときに発生しています (これは、ビューで S3 を使用する唯一の場所であるため、そうであると確信しています)。

    public static String generateS3Url(String filename, int minutes) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MINUTE, minutes);
        Date expDate = cal.getTime();
        try {
            BasicAWSCredentials cre = new BasicAWSCredentials(Play.application().configuration().getString("amazons3.accessKey"), Play.application().configuration().getString("amazons3.secretKey"));
            AmazonS3 s3 = new AmazonS3Client(cre);
            String url = s3.generatePresignedUrl(BUCKET_NAME, filename, expDate, HttpMethod.GET).toString();
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

ご覧のとおり、提供されたイメージ名への一時的な URL が作成されます。これは、ローカルでもまったく同じ詳細を使用して、サーバー上で一定の時間、完全に正常に機能します。頻繁に再起動する必要があると思いますか?

これで十分な情報だと思いますが、

お役に立てることがあれば、よろしくお願いします。

リッチ

** 編集 ** Build.scala の依存関係

val appDependencies = Seq(
    // Add your project dependencies here,
    javaCore,
    javaJdbc,
    javaEbean
  )
4

0 に答える 0