The size of my application for a bullet on Heroku indicates 222 mb. Quite huge and beyond 200 MB.
So I checked these things:
Inspect the size of my source code: 89.9 Mo , knowing that 80.2 Mo comes to play the target folder in the application.
Check my .gitignore file to make sure the destination folder of the application to play is excluded. Here is my .gitignore file:
.DS_Store logs project/project project/target target // target well precised here tmp .history dist /.idea / *.iml //space here otherwise appears as a comment here /out /.idea_modules /.classpath /.project /RUNNING_PID /.settings
Check SBT Ivy Cache Size: 100.9 Mo
Here is the size of each folder (left) in detail:
MikaPc: cache Mika $ du -xak. | sort -n | tail -50
1664./org.neo4j/neo4j/docs /. 1668./org.neo4j/neo4j-kernel/docs
/. 1680./org.springframework/spring-test 1748./org.neo4j/neo4j
1752./org.aspectj/aspectjweaver/jars
1752./org.aspectj/aspectjweaver/jars/aspectjweaver-1.7.1.jar
1860./org.springframework/spring-jdbc
1888./org.springframework.data/spring-data-commons
1980./org.scala-sbt/main/jars
1980./org.scala-sbt/main/jars/main-0.12.2.jar
1992./org.scala-sbt/main
2100./org.springframework/spring-context/docs
2100./org.springframework/spring-context/docs/spring-context-3.2.0.RELEASE-javadoc.jar 2104./com.sun.jersey 2348./org.springframework/spring-core
2356./org.springframework.data/spring-data-neo4j
2404./org.springframework/spring - beans
2776./org.apache.lucene/lucene-core
2800./org.springframework/spring-web
2808./org.springframework/spring-webmvc
2812./org.aspectj/aspectjweaver/docs
2812./org.aspectj/aspectjweaver/docs/aspectjweaver-1.7.1-javadoc.jar 2844./org.apache.lucene 3016./org.neo4j/neo4j-kernel/jars
3820./org.springframework/spring-context
4356./org.neo4j/neo4j-cypher/jars
/. 4436./org.specs2/specs2_2.10/docs
4436./org.specs2/specs2_2.10/docs/specs2_2.10-1.13.1-SNAPSHOT-javadoc.jar 4584./org.scalaz/scalaz-core_2.10/docs
/. 4824./org.neo4j/neo4j-cypher 5712./org.neo4j/neo4j-kernel
5936./org.aspectj/aspectjweaver
6024./org.springframework.data 6484./org.aspectj
6520./org.specs2/specs2_2.10/jars
/. 6812./org.scala-sbt 8288./org.scalaz/scalaz-core_2.10/jars
8288./org.scalaz/scalaz-core_2.10/jars/scalaz-core_2.10-7.0-SNAPSHOT.jar 11500./org.specs2/specs2_2.10 11524./org.specs2
13132./org.scalaz/scalaz-core_2.10 13140./org.scalaz
15832./org.neo4j 23500./org.springframework
98552.
My SBT build file contains the following dependencies:
val appDependencies = Seq( jdbc, anorm, "org.springframework" % "spring-aop" % "3.2.0.RELEASE", "org.springframework" % "spring-aspects" % "3.2.0.RELEASE", "org.springframework" % "spring-beans" % "3.2.0.RELEASE", "org.springframework.data" % "spring-data-commons-core" % "1.4.1.RELEASE", "org.springframework" % "spring-expression" % "3.2.0.RELEASE", "org.springframework" % "spring-jdbc" % "3.2.0.RELEASE", "org.springframework" % "spring-orm" % "3.2.0.RELEASE", "org.springframework" % "spring-test" % "3.2.0.RELEASE", "org.springframework" % "spring-tx" % "3.2.0.RELEASE", "org.springframework.data" % "spring-data-neo4j" % "2.2.0.RELEASE" excludeAll( ExclusionRule(organization = "com.sun.jdmk"), ExclusionRule(organization = "com.sun.jmx"), ExclusionRule(organization = "javax.jms") ), "org.neo4j" % "neo4j" % "1.9.M05" excludeAll( ExclusionRule(organization = "org.neo4j", name="neo4j-kernel") ), "org.neo4j" % "neo4j-kernel" % "1.9.M05" % "test" classifier "tests" classifier "", "asm" % "asm-all" % "3.1", "org.springframework.data" % "spring-data-neo4j-rest" % "2.1.0.RELEASE" excludeAll( ExclusionRule(organization = "org.neo4j") ), "org.neo4j" % "neo4j-rest-graphdb" % "1.9.M04", "org.scalaz" %% "scalaz-core" % "7.0-SNAPSHOT" withSources(), "org.specs2" %% "specs2" % "1.13.1-SNAPSHOT" % "test" withSources(), "org.mockito" % "mockito-all" % "1.9.0" %"test", "securesocial" %% "securesocial" % "master-SNAPSHOT" withSources() )
What can I do to reduce this huge cork size? Even if I delete some sources of documentation and cans, the size will be huge.
It seems that the folder of the target application for playback is being sent .. despite the .gitignore file
Of course, I created my Heroku application using this buildpack: https://github.com/heroku/heroku-buildpack-scala
Also, is there a refinement method in SBT (or playback configurations) that certifies dependencies such as Specs2 (testing) should not be loaded into the Heroku production environment?
EDIT ---------
I ran the following command to show the actual size of what I clicked on Heroku:
MikaPc:wwa Mika$ heroku run bash Running `bash` attached to terminal... up, run.9266 ~ $ du -h --apparent-size --max-depth 2 5.3K ./test/resources 12K ./test/unit 5.6K ./test/functional 6.5K ./test/context 8.5K ./test/acceptance 5.2K ./test/integration 47K ./test 5.0K ./app/helpers 33K ./app/controllers 11K ./app/models 161K ./app/assets 34K ./app/views 8.0K ./app/applicationservices 5.0K ./app/repositories 20K ./app/utils 281K ./app 8.7M ./target/scala-2.10 1.4M ./target/resolution-cache 143K ./target/streams 60M ./target/staged 71M ./target 1.1M ./.sbt_home/bin 834K ./.sbt_home/.sbt 1.9M ./.sbt_home 30K ./public/images 171K ./public/javascripts 9.6K ./public/stylesheets 214K ./public 4.0K ./.ivy2/cache 8.0K ./.ivy2 1.1M ./.jdk/bin 19M ./.jdk/lib 203K ./.jdk/include 227M ./.jdk/jre 247M ./.jdk 2.8M ./project/target 20K ./project/project 53M ./project/boot 56M ./project 12K ./conf 375M .
375 Mo before compression, I think it comes to 222Mo .. hum
And the winner: 227M ./.jdk/jre , taking part of the size of the bullet. This is normal?