Хобрук: Ваш путь к мастерству в программировании

Размер Heroku Slug: 222 МБ / Play Framework 2.1 /

Размер слага моего приложения на Heroku составляет 222 МБ. Довольно большой и превышает разрешенные 200 МБ.

Таким образом, я проверил эти вещи:

  • Проверьте размер моего исходного кода: 89,9 Мб, зная, что 80,2 Мб исходит из целевой папки приложения для воспроизведения.

  • Проверьте мой файл .gitignore, чтобы убедиться, что целевая папка игрового приложения полностью исключена. Вот мой файл .gitignore:

.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

Проверьте размер кеша SBT ivy: 100,9 Мб

Вот размер каждой папки (слева) в деталях:

MikaPc:cache Mika$ du -xak .|sort -n|tail -50
1664 ./org.neo4j/neo4j/docs 1664 ./org.neo4j/neo4j/docs/neo4j-1.9.M05-javadoc.jar
1668 ./org.neo4j/neo4j-kernel/docs
1668 ./org.neo4j/neo4j-kernel/docs/neo4j-kernel-1.9.M05-javadoc.jar
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
4356 ./org.neo4j/neo4j-cypher/jars/neo4j-cypher-1.9.M05.jar
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
4584 ./org.scalaz/scalaz-core_2.10/docs/scalaz-core_2.10-7.0-SNAPSHOT-javadoc.jar 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< br> 6520 ./org.specs2/specs2_2.1 0/jars/specs2_2.10-1.13.1-SNAPSHOT.jar
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 .

Мой файл сборки SBT содержит следующие зависимости:

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()
  )

Что я мог сделать, чтобы уменьшить этот огромный размер пули? Даже если я удалю некоторые документы и источники jar, размер будет огромным.

Действительно кажется, что целевая папка игрового приложения отправлена ​​... несмотря на файл .gitignore

Конечно, я создал свое приложение Heroku, используя этот пакет сборки: https://github.com/heroku/heroku-buildpack-scala

Кроме того, есть ли способ уточнить в SBT (или игровой конфигурации), что некоторые зависимости, такие как Specs2 (тестирование), не должны загружаться в производственной среде Heroku?

ИЗМЕНИТЬ ---------

Я выполнил следующую команду, чтобы показать фактический размер того, что я нажал на 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 до сжатия, я думаю, в конечном итоге до 222Mo .. гул

И победителем становится: 227M ./.jdk/jre часть размера слага. Это... нормально?


Ответы:


1

Heroku недавно изменил способ построения JDK, который мы развертываем с вашим приложением. Теперь он намного больше, чем раньше. Мы также увеличили предельный размер слагов, так что это не помешает вашему приложению, кроме как немного замедлить выпуски.

Мы обновим документы, чтобы они соответствовали фактическим текущим ограничениям.

08.03.2013
  • Понял :) Большое спасибо! 09.03.2013
  • @adib В итоге мы нашли способ уменьшить размер упакованного JDK. Вы должны увидеть резко уменьшенный размер слагов при выпуске новых релизов. Если нет, обратитесь в службу поддержки Heroku. 13.03.2013
  • @friism Учебное пособие по тодолисту Play Framework 2.1 заканчивается размером слага 119,9 МБ (только что завершил обучение и отправил несколько секунд назад). Надеюсь, что вы скоро значительно увеличите верхний предел слагов. 13.03.2013
  • @friism Действительно! Я только что выпустил новую версию своего собственного приложения, и вот цифры: Размер репо: 186 МБ и размер Slug: 148 МБ из 200 МБ. Потрясающее уменьшение и далеко не предел! Здорово :) 13.03.2013
  • @adib с обновленными меньшими JDK, вы все еще беспокоитесь, что достигнете предела в 200 МБ? 13.03.2013
  • @friism Да, потому что пустое приложение (пример Play todolist) уже заняло более половины доступного места. Я полагаю, что реальному приложению потребуется значительно больше места. 14.03.2013
  • Новые материалы

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..