index [] · index numbers 512mb of memory failing to meet, 62, 342, 348 requirement for, 7 99.99%...
TRANSCRIPT
469
INDEX
Numbers
512MB of memoryfailing to meet, 62, 342, 348requirement for, 7
99.99% (four nines), 16099.999999999% (eleven nines), 160
A
Access Keys, 27–28, 37accreditation, 27–28ACID (atomicity, consistency, isolation, and
durability), 158ActiveRecord
Delayed Job in, 255–256introduction to, 162in Ruby/Rails apps, 217
ActiveState, 352add-ons
architecture and, 117Cassandra, 119, 222–224CouchDB, 50, 119, 224–226creating, 127–130data stores in, 50ecosystem of, 116–117ElasticSearch, 120Exceptional, 121IndexTank, 120installing from CLI, 125–127installing from Dashboard, 122–125introduction to, 115LogEntries, 121logging, 120–121Loggly, 121Logplex, 121for mobile apps, 405–409MongoDB, 118–119monitoring, 121
Neo4j, 119NoSQL-based data stores, 118Papertrail, 121popular, 117–121Postgres. See Postgres databasesRanger, 121Redis, 119search, 119–120Sentry, 121Solr, 120Sphinx, 120SQL-based data stores, 118StillAlive, 121summary of, 131
Admin users, 198administration of applications
overview of, 146–152tasks in, 20users in, 198
Admins, 152Advanced Package Tool (APT), 272AJAX, 390–391Akamai, 41Akka, 335aliases, 83Amazon
CloudFront by. See CloudFrontdata centers of, 25DynamoDB by, 48, 51EC2 by. See Amazon Elastic Compute Cloud
(Amazon EC2)Elastic Block Store by, 29, 159–160Machine Image by, 60Relational Database Service by, 50, 118,
210–215S3 by. See Amazon Simple Storage Service
(Amazon S3)Web Services by, 38, 117, 182,
210–215
bindex.indd 469bindex.indd 469 09/01/13 6:50 PM09/01/13 6:50 PM
COPYRIG
HTED M
ATERIAL
470
Amazon Elastic Compute Cloud (Amazon EC2) – AspectJ
Amazon Elastic Compute Cloud (Amazon EC2)Database.com vs., 181e-mail in, 57external data stores in, 226in Heroku, 4–6introduction to, 3–4
Amazon Machine Image (AMI), 60Amazon Simple Storage Service (Amazon S3)
buildpacks in, 369, 372Clojure apps in, 326Django apps in, 309fi le uploads in, 47Grails apps in, 342introduction to, 8Node.js apps in, 317PHP apps in, 347in release management, 104–105Scala apps in, 334snapshots of databases in, 160static assets in, 36–40
Amazon Web Services (AWS) APIs, 38, 117, 182AMI (Amazon Machine Image), 60Android devices. See mobile applicationsAnorm, 328Ant, 57, 274–275, 294AOP (aspect-oriented programming), 281Apache
Ant by, 57, 274–275, 294Cassandra by, 119, 222–224CouchDB by, 50, 119, 224–226HTTP Server by, 347Ivy by. See IvyLucene by, 119–120Maven by. See MavenSoftware Foundation of, 222Subversion by, 74
apex domains, 67, 83Apex sharing rules, 200Apex triggers, 203–204APIs
Bulk, 182Chatter. See Chatter APIsJava Persistence, 281keys for, 188leveraging, 145–146Metadata, 182REST. See REST APIsStreaming, 182usage notifi cations for, 192
AppleApp Store of, 385iPads by. See mobile applicationsiPhones by. See mobile applicationsMacs by. See Macsoperating systems by. See Mac OS XXcode Developer Tools by, 272
application portfolio management, 23–24Applications information, 150–152APT (Advanced Package Tool), 272Arab Spring, 411architecture
accreditation in, 27–28add-ons and, 117Amazon CloudFront and, 41–43Amazon S3 and, 36–40availability zones in, architecturecertifi cations in, 27–28compliance in, 27–28, 32–33content delivery networks in, 18, 36–43data at rest in, 32data in transit in, 32data retention in, 27data stores in, 18disaster recovery in, 28–29dyno isolation in, 26encryption in, 32–36frameworks in, 17–18international apps in, 41–43introduction to, 17–18languages in, 17–18logs in, 33in mobile apps, 384–389network security and, 25–26pace layering in, 21–24passwords in, 31physical security and, 25redundancy, 28–31reliability in, 28–31security and, 25–27, 31–33SSL in, 33–36stack-layer security in, 26static assets in, 18, 36–43summary of, 43third-party providers and, 32–33transparency in, 29–31in twelve-factor apps, 18–20
Argent Aspen, 5AspectJ, 281
bindex.indd 470bindex.indd 470 09/01/13 6:50 PM09/01/13 6:50 PM
471
aspect-oriented programming (AOP) – cache-hit ratios
aspect-oriented programming (AOP), 281Aspen, 5Atlassian Bamboo, 298atomicity, consistency, isolation, and durability
(ACID), 158attributes, 175authentication, 98, 198–199, 262automation
in Database.com, 201–204of Postgres health checks, 160of process management, 6–7
availability zones, architectureAWS (Amazon Web Services) APIs, 38, 117, 182,
210–215AWS Management Console, 38–40,
211–215
B
B2C (business-to-consumer), 412BaaS (back end as a service), 405BAAs (business associate agreements), 28back end, 388–394back end as a service (BaaS), 405background jobs. See also Delayed Job (DJ),
253–261BackgroundThread plugin, 343backing services, 19Backups & Jobs, 210backups in Postgres, 169–171Backups in Redis, 221Badious Bamboo, 5bare domains, 67, 83Basecamp, 102BASIC, 370–375Basic authentication, 98Beans, 281Beckwith, Burt, 342beta status add-ons, 117binary dependencies, 366–370binary large objects (BLOBs), 48bin/compile, 353–358, 373–375bin/detect, 353, 373binding to ports
in Clojure, 327, 343introduction to, 62–63, 264in Java, 297in Node.js, 318in PHP, 348
in Python, 310in Scala, 335
bin/release, 358–359, 375bit rot, 10Blackberry devices. See mobile applicationsBlassic binary, 370–375BLOBs (binary large objects), 48BoxCar, 405, 409buckets
in Amazon S3, 37–40in CloudFront, 41–43introduction to, 27in release management, 103–104
build scripts, 373build stages, 19Builder, 241–243buildpacks
BASIC interpreter in, 370–375bin/compile in, 353–358, 373–375bin/detect in, 353, 373bin/release in, 358–359, 375Blassic binary in, 370–375build scripts in, 373creating apps in, 377–380creating custom, 370–380deploying apps to Heroku in, 377–380introduction to, 351–352.NET apps and, 359–362packaging binary dependencies in,
366–370Perl apps and, 362–366pushing to public Git repositories, 376–377summary of, 380Vulcan in, 370–375workings of, 352–359
Bulk API, 182Bundler
Delayed Job in, 255–256introduction to, 235–238Rails apps and, 239–240in release management, 94–95social apps and, 440
business associate agreements (BAAs), 28business-to-consumer (B2C), 412
C
C# programs, 359–362cache-hit ratios, 167–168
bindex.indd 471bindex.indd 471 09/01/13 6:50 PM09/01/13 6:50 PM
472
caching – command-line interfaces (CLIs)
cachingin Clojure apps, 326in Groovy, 342in Java apps, 297–298in Node.js apps, 317in PHP apps, 347in porting apps, 52–53, 263in Python apps, 309in Ruby, 261–262in Scala apps, 334in session management, 296
CakePHP, 347Campfi re, 102Camping, 234cancelling queries, 176Canonical Name (CNAME), 66, 83Canvas apps
contest apps and, 416, 424creating, 412–416deploying to Heroku, 424–429Page of, 412
CAs (certifi cate authorities), 34–35Cassandra, 119, 222–224Catalina, 281Catalyst, 362CDNs (content delivery networks). See content
delivery networks (CDNs)Cedar, 4–6, 351Cedexis, 41Celadon Cedar, 4–6, 351central data repositories, 388–389centralized models, 74certifi cate authorities (CAs), 34–35certifi cations, 27–28change sets, 203Chatter APIs
Amazon Web Services and, 38, 182data stores and, generally, 182introduction to, 49release of, 411for social apps, 429–444social graphs in, 204
Chen, David E., 27chroot, 8classifi cations, 22ClearDB
introduction to, 50–51MYSQL and, 118
PHP apps and, 347SQL-based data stores and, 158third-party data stores and, 208–210
CLI (command line interface). See command-line interfaces (CLIs)
Clojurebinding to ports in, 327, 343caching in, 326confi guration variables in, 326, 342data stores in, 326dependencies in, 326, 342e-mail in, 326–327, 342external programs in, 327, 342fi lesystems in, 326logging in, 327, 342long-running processes in, 327moving domains in, 328, 343scaling up vs. scaling out in, 327, 342–343session management in, 326shutting down in, 327, 343for software development, generally, 319–328static assets in, 326Web containers in, 326, 342Web servers in, 326, 342
CloudAMPQ, 318, 327Cloudant, 119, 224–226CloudBerry Explorer, 38CloudFront
architecture and, 41–43Clojure apps in, 326Django apps in, 309Grails apps in, 342Node.js apps in, 317PHP apps in, 347Scala apps in, 334
CNAME (Canonical Name), 66, 83codebases, 18–19CoffeeScript, 331collaborators, 83–84Collections tab, 219collectstatic, 309CometD, 389command-line interfaces (CLIs)
Cassandra in, 223–224ClearDB in, 208Cloudant in, 225–226creating databases in, 163deploying apps in, 77–79
bindex.indd 472bindex.indd 472 09/01/13 6:50 PM09/01/13 6:50 PM
473
comma-separated value (CSV) spreadsheets – data retention
destroying databases in, 169followers for databases in, 165forking databases in, 164Heroku interactions via, 77–79installing apps from, 125–127maintenance mode in, 106MongoDB in, 218Proximo in, 227–229RDS tools in, 214RedisGreen in, 220–222Spring Roo in, 281
comma-separated value (CSV) spreadsheets, 189–190
compliance, 27–28, 32–33Compojure, 319–321Composer, 347Concurrent Versions System (CVS), 74confi guration variables (confi g vars)
in Clojure, 326, 342in Node.js, 317in PHP, 347in porting apps, 54–55in Python, 309in release management, 94–97in Scala, 334in session management, 296
console process type, 245containerless applications, 275–281content delivery networks (CDNs)
in architecture, 18, 36–43caching in, 262CloudFront as, 41–43introduction to, 15
contest apps, 416–424continuous integration, 107–114, 298continuous protection, 159–160Couchbase’s Memcache. See MemcacheCouchDB, 50, 119, 224–226Coyote, 286CPAN, 363, 365create, read, update, and delete
(CRUD), 199CRM (customer relationship management), 22,
158, 407cron jobs, 57–59cross-site scripting (XSS), 31CRUD (create, read, update, and
delete), 199
CSS fi les, 54CSV (comma-separated value) spreadsheets,
189–190cURL
buildpacks and, 366, 368Clojure and, 327Grails and, 342Heroku API and, 145Java and, 296PHP apps and, 348Ruby and, 264Scala apps and, 335URL transfer tasks in, 61
custom collaborators, 83–84custom domains, 83, 133–135custom error pages, 103–106customer relationship management (CRM), 22,
158, 407CVS (Concurrent Versions System), 74Cyberduck, 38
D
DaaS (data as a service), 18, 158–159, 182Dalli, 262Dancer, 362Dashboard
Cassandra in, 223ClearDB in, 208–210Cloudant in, 224–225custom collaborators in, 83–84custom domains in, 83deploying apps in, 80–87installing apps from, 122–125introduction to, 80–82JustOneDB in, 216MongoDB in, 218names of apps in, 82Proximo in, 227RedisGreen in, 221–222scaling resources in, 84–87
data as a service (DaaS), 18, 158–159, 182
data caching, 261data clips, 173–174data integrity, 200–201Data Loader, 188data retention, 27
bindex.indd 473bindex.indd 473 09/01/13 6:50 PM09/01/13 6:50 PM
474
data storage vs. fi le storage – development databases
data storage vs. fi le storage, 192data stores
in architecture, 18in Clojure, 326Database.com as. See Database.comin Groovy, 342Java and, 296in Node.js, 317in PHP, 347porting apps to Heroku and, 48–51, 263Postgres as. See Postgres databasesin Python, 309in Scala, 334third-parties for. See third-party data stores
Database Interface (DBI), 217Database Session Plugin, 342Database.com
advanced features in, 199Apex triggers in, 203–204authenticating users in, 198–199automation in, 201–204creating databases in, 183–188creating sample app in, 193–198data integrity in, 200–201as data store, generally, 181–182exporting data in, 188–191importing data in, 188–191managing change in, 202–203managing databases in, 191–192managing users in, 198–199in porting apps, 49–50profi les in, 199–200sharing in, 199–200for social apps, 430–444social graphs in, 204startup in, 182–183storing fi les in, 203summary of, 204–205test databases in, 202–203validation rules in, 200–201workfl ow rules in, 201–202
databases in Postgres. See Postgres databases
DataNucleus JPA, 56DBI (Database Interface), 217DD (deployment descriptor) fi les, 294DDoS (Distributed Denial of Service), 26de Icaza, Miguel, 359decide() method, 68
Delayed Job (DJ)deploying apps to Heroku in, 257–268introduction to, 253–255setup of, 255–257testing, 258–261
delegated authentication, 198–199deleting databases, 168–169dependencies
binary, 366–370in Clojure, 326, 342declaration of, 19in Java, 272–275in Node.js, 317in PHP, 347–348porting apps to Heroku and,
56–57, 263in Python, 310in Ruby, 235–238in Scala, 334–335in session management, 296
deploy hooks, 102–103deploying applications
buildpacks in, 377–380command-line interface in, 77–79custom collaborators in, 83–84custom domains in, 83Dashboard in, 80–87Delayed Job in, 257–268Foreman in, 75–76Git in, 74–75, 79–80Heroku clients in, 76introduction to, 73–74management of, 148names of apps in, 82post deploy hooks in, 80in Rails, 244–247in Ruby, 244–247, 251–253,
257–268scaling resources in, 84–87in Sinatra, 251–253social apps in, 424–429summary of, 87–88Toolbelt installation and, 74–76
deploying WAR fi les, 294–295deployment descriptor (DD) fi les, 294destroying databases, 168–169developer operations (DevOps), 267development architectures, 384–389development databases, 178
bindex.indd 474bindex.indd 474 09/01/13 6:50 PM09/01/13 6:50 PM
475
DevOps (developer operations) – extension method
DevOps (developer operations), 267direct uploads, 64disaster recovery, 28–29Distributed Denial of Service (DDoS), 26distributed models, 74distribution, defi ned, 7DJ (Delayed Job). See Delayed Job (DJ)Django, 302–309DNS (Domain Name Service)
cached, 67Canonical Name and, 35, 42, 66Java apps and, 297management of, 85naked domains and, 67Python apps and, 311Ruby apps and, 264updating, 83, 134–135
DNSimple, 83DoD 5220.22-M (“National Industrial Security
Program Operating Manual”), 27Dollar, David, 75Domain Name Service (DNS). See DNS (Domain
Name Service)domains
apex, 67, 83bare, 67, 83in Clojure, 328, 343custom, 83in Dashboard, 83in DNS, 67fully-qualifi ed, 54, 83in Heroku Dashboard, 83moving, 66naked, 67, 83in Node.js, 318in PHP, 349in Python, 311in Scala, 336
“don’t repeat yourself” principle, 234downtime planning, 103–106drains, 60–61Drawbridge, 327Duffy, Frank, 21dump fi les, 171–172dynos
introduction to, 6–7isolation in, 8, 26manifolds in, 6–7in multi-dyno apps, 47
E
EAR (Enterprise Archive) fi les, 270Ebean ORM, 290–291EBS (Elastic Block Store), 29, 159–160EC2 (Elastic Compute Cloud). See Amazon Elastic
Compute Cloud (Amazon EC2)ecosystems, 116–117Elastic Block Store (EBS), 29, 159–160Elastic Compute Cloud (Amazon EC2). See
Amazon Elastic Compute Cloud (Amazon EC2)
ElasticSearch, 120eleven nines (99.999999999%), 160e-mail
in Clojure, 326–327, 342Java and, 296in Node.js, 317in PHP, 348porting apps and, 57, 263in Python, 310in Scala, 335SendGrid, 87
embedded databases, 48Embedded Jetty, 275–281encryption, 32–36Endpoint, 34–36Endpoint Information, 210enterprise applications, 268–271Enterprise Archive (EAR) fi les, 270enterprise resource planning (ERP),
21, 407EntityStore, 262ephemeral fi lesystems, 47erosion resistance, 10–11ERP (enterprise resource planning),
21, 407error pages, 106event streams, 20Eventlet, 310Evolutions, 332Exceptional, 121existing applications, 47–48,
51, 67–68existing data stores, 226–229exporting data, 188–191exporting processes, 19–20Express, 312–313, 317–318extension method, 241
bindex.indd 475bindex.indd 475 09/01/13 6:50 PM09/01/13 6:50 PM
476
external programs – GitHub
external programsin Clojure, 327, 342in Java, 296in Node.js, 318in PHP, 348porting apps and, 61, 264in Python, 310in Scala, 335
F
Facebook appsCanvas, 412–416for contests, 416–424deploying to Heroku, 424–429introduction to, 411–412PHP vs., 343
federated authentication, 198–199Ferret, 48fi eld updates, 201fi le storage, defi ned, 192fi le uploads, 47–48fi lesystems
caching in, 263in Clojure, 326in Groovy, 341in Java, 296in Node.js, 317in PHP, 346in Python, 309in Scala, 334traditional vs. ephemeral, 46–48
fi rewalls, 25–26Fisher, Robert, 342FlightCaster, 389Flying Sphinx, 48, 120following databases, 161Force.com, 181Foreman
confi guration variables in, 97deploying apps, 75–76Kensa and, 128–129
forking databases, 160–161, 164forks, 76four nines (99.99%), 160FQDNs (fully-qualifi ed domain names), 54, 83frameworks, defi ned, 17–18front end, 394–405
Fugu, 125–126fully-qualifi ed domain names (FQDNs), 54, 83
G
Gartner, 21Geddy, 317–318Gem Bundler, 19gems
Bundler, 235–238defi ned, 235Kensa, 127–130OAuth, 437Postgres, 239Rails, 127–130Rake, 177, 239Ruby, 76, 94–96, 108–109RubyGems for, 235–238in Sinatra apps, 251Tddium, 108–109Twilio Rbuy, 239Vulcan and, 366–368
gevent, 310Git. See also GitHub
buildpacks and, 376–377, 379in Canvas apps, 424–425in Clojure apps, 323–324command-line commands for, 78confi guration variables in, 95deploying apps in, 74–75, 79–80git remotes in, 77, 82, 91–93in release management, 91–93repositories in, 251–252, 376–377, 424–425in Sinatra apps, 251–252
git remotes, 77, 82, 91–93GitHub
binding to ports in, 62buildpacks and, 376–377, 379in Clojure apps, 327continuous integration in, 110–114gitignore in, 306in Grails apps, 343introduction to, 75–77Java and, 297in Node.js apps, 318in PHP apps, 348porting apps to Heroku and, 264in Scala apps, 335
bindex.indd 476bindex.indd 476 09/01/13 6:50 PM09/01/13 6:50 PM
477
GlassFish – International Traffi c in Arms Regulations (ITAR)
GlassFish, 55global positioning system (GPS), 385Goliath, 15Google, 311Gosling, Dr. James A., 268GovCloud (US), 28governance, 23GPS (global positioning system), 385Grails, 336–343Grails Database Session Plugin, 342graph databases, 119graphical user interfaces (GUIs), 80Graphs tab, 221Groovy
caching in, 342data stores in, 342fi lesystems in, 341introduction to, 336–343session management in, 342static assets in, 342
Growl, 409“Guidelines for Media Sanitization” (NIST
800-88), 27GUIs (graphical user interfaces), 80Gunicorn, 310
H
Hadoop, 49Hall, Ben, 359–360Hansson, David Heinemeier, 234Harris, Parker, 25Health Insurance Portability and Accountability
Act (HIPAA), 28Heapy, 310Heroku
client in, 76Dashboard in. See Dashboarddeploying apps to. See deploying applicationsdyno isolation in, 7–8dyno manifolds in, 6–7dynos in, 6–7erosion resistance in, 10–11Labs in, 55Manager in, 150–152for Mobile version of, 405Postgres in. See Postgres databasesprocess model in, 8–10
routing HTTP requests in, 13–15slug compiler in, 12–13stacks in, 4–6summary of, 15Toolbelt in. See Toolbeltversion control in, 11–12
Hibernate, 56, 281–286, 336Hiccup, 319, 322Hickey, Rich, 319higher-availability architecture, 160–161HIPAA (Health Insurance Portability and
Accountability Act), 28Homebrew, 234Hoover library, 310How Buildings Learn: What Happens After
They’re Built, 21HSQLDB (Hyper Structured Query Language
Database), 338hstore, 174–176HTML5 mobile applications
back end of, 390–394front end of, 394–405introduction to, 386–387writing, generally, 389
HTTPBasic authentication, 98caching, 52–53, 261–262porting existing apps and, 67–68requests, 13–15, 253–254
HTTParty, 440HTTPS, 67–68HTTPS over SSL, 66–68hybrid mobile applications, 387Hyper Structured Query Language Database
(HSQLDB), 338
I
importing data, 171–173, 188–191IndexTank, 120Info tab, 221integration testing, 90intelligent routing, 6IntelliJ, 329interactive voice response (IVR), 238international applications, 41–43International Traffi c in Arms Regulations
(ITAR), 28
bindex.indd 477bindex.indd 477 09/01/13 6:50 PM09/01/13 6:50 PM
478
Internet service providers (ISPs) – just-in-time (JIT) provisioning
Internet service providers (ISPs), 67Inversion of Control (IoC)
frameworks, 281I/O approaches, 286I/O bottlenecks, 167IoC (Inversion of Control)
frameworks, 281iOS devices. See mobile applicationsIronCache, 50IronMQ, 327isolation
in ACID, 158of dynos, 7–8, 26in twelve-factor apps, 19
ISPs (Internet service providers), 67ITAR (International Traffi c in Arms
Regulations), 28IVR (interactive voice response), 238Ivy
Grails and, 339, 342I/O approaches and, 286Java apps and, 294Scala apps and, 333–334
J
JAR (Java ARchive), 274Java
additional considerations in, 295–298
ARchive in, 274buildpacks in, 355–358caching in, 297–298containerless apps in, 275–281continuous integration in, 298dependencies in, 272–275Embedded Jetty and, 275–281Enterprise Edition of, 56, 268–271Hibernate and, 281–286introduction to, 267–268Linux and, 272Mac OS X and, 272memory management in, 298Naming and Directory Interface in, 270overview of, 268Persistence API in, 281Play framework and, 286–294porting apps to Heroku in, 295–297
session management in, 297–298Spring Framework and, 281–286summary of, 298–299Tomcat and, 281–286WAR fi les in, 294–295Windows and, 271
Java ARchive (JAR), 274Java Database Connectivity (JDBC),
162, 281Java Development Kit (JDK), 268, 271–272,
405–409Java EE (Java Platform, Enterprise Edition), 56,
268–271Java Message Service (JMS), 343Java Naming and Directory Interface (JDNI), 270Java Persistence API (JPA), 281Java Virtual Machine (JVM)
Clojure and, 319, 327Grails and, 336introduction to, 268Scala apps in, 328
JavaMelody Grails Plugin, 342JavaScript Object Notation (JSON), 218, 328–333JavaServer Faces (JSF), 56JavaServer Pages (JSP), 56, 269JBoss, 55JBoss Netty, 286JDBC (Java Database Connectivity), 162, 281JDK (Java Development Kit), 268, 271–272,
405–409JDNI (Java Naming and Directory
Interface), 270Jenkins app, 298Jetty, 56, 327, 334Jetty Runner, 275, 342JIT (just-in-time) provisioning, 199Jitterbit Data Loader, 189JMS (Java Message Service), 343JPA (Java Persistence API), 281JPython, 268jQMobile, 386jQuery Mobile, 386, 394JRuby, 268JSF (JavaServer Faces), 56JSON (JavaScript Object Notation), 218,
328–333JSP (JavaServer Pages), 56, 269just-in-time (JIT) provisioning, 199
bindex.indd 478bindex.indd 478 09/01/13 6:50 PM09/01/13 6:50 PM
479
JustOneDB – Macs
JustOneDB, 50, 215–217JVisualVM, 327JVM (Java Virtual Machine). See Java Virtual
Machine (JVM)
K
Kensa gem, 127–130key-value pairs, 175
L
LAMP (Linux, Apache, MySQL, PHP), 343languages for software development
in architecture, generally, 17–18Clojure, 319–328Grails framework for, 336–343Groovy, 336–343introduction to, 301Java. See JavaNode.js, 311–318PHP, 343–349Python, 302–311Ruby. See Ruby appsScala, 328–336summary of, 349
Launch DB Instance Wizard, 211–213Leiningen, 319, 325–326Lerdorf, Rasmus, 343LexiLoader, 189Lifty, 334Light Database.com, 200Light users, 198Linux
Git and, 11HTTP servers in, 310in LAMP, 343Maven in, 275OpenJDK 6 in, 272PHP in, 343production environments in, 90stacks in, 4–5Toolbelt on, 73, 76
Linux Containers (LXC), 8Lisp, 319local environment variables, 97local workstations, 234–235Log4j, 270
LogEntries, 121logging
add-ons for, 120–121in architecture, 33in Clojure, 327, 342event streams and, 20Java and, 296in Node.js, 317in PHP, 348porting apps and, 59–61,
264in Python, 310in Scala, 335viewing logs in, 136–140
LogglyClojure and, 327Grails and, 342introduction to, 121Java and, 270Node.js apps and, 317Python apps in, 310
logins, 81Logplex, 60, 121, 166long-running processes
in binding to ports, 264in Clojure, 327in Java, 297in Node.js, 318in PHP, 348–349porting apps and, 63–65in Scala, 335
Lucene, 119–120Lulz Security, 27LXC (Linux Containers), 8
M
Mac OS X. See also MacsGrowl notifi cations in, 409Java and, 272Maven and, 275Maven in, 275PHP in, 343Ruby with, 234
MacPorts, 272Macs
stacks in, 5Toolbelt on, 73, 76
bindex.indd 479bindex.indd 479 09/01/13 6:50 PM09/01/13 6:50 PM
480
Mailgun – moving domains
Mailgun, 57maintenance mode, 103–106MAMP, 343–344managing applications
administration options for, 146–152Admins in, 152API leveraging in, 145–146Applications information in, 150–152custom domains in, 133–135deploys in, 148Heroku Manager for, 150–152introduction to, 20, 133Members in, 152on mobile devices, 146–148multi-account options for, 149New Relic in, 141–144Nezumi in, 147performance tuning in, 140–145status page in, 147–148summary of, 153viewing logs in, 136–140Worqbench in, 148
managing change, 202–203managing databases, 166, 191–192managing users, 198–199Matsumoto, Yukihiro “Matz,” 234Matz’s Ruby Implementation (MRI), 5Maven
buildpacks in, 355–358containerless apps in, 280dependencies in, 272–275Grails and, 336, 342Java and, 268, 270–275Scala apps and, 334–335Spring Framework and, 285
Members, 152Memcache
introduction to, 15Java and, 270PHP apps and, 347Ruby apps and,
261–262Scala apps and, 334
MemcachierDjango apps in, 309introduction to, 50, 53Java and, 297Node.js apps in, 317
PHP apps in, 347Ruby apps and, 262
memory management, 62, 298Memory Quota Exceeded (R14)
errors, 62menu method, 241Metadata API, 182Microsoft SharePoint, 411Miyagawa, Tatsuhiko, 363mobile applications
add-ons for, 405–409back end of, 390–394BoxCar for, 409central data repositories for, 388–389development architectures in, 384–389front end of, 394–405HTML5 for, 386–389hybrid, 387introduction to, 383–384managing, 146–148native, 384–386Parse for, 406–407PubNub for, 409RhoConnect for, 407–408StackMob for, 405–406summary of, 409–410toolkits for, 405–409
model-view-controller (MVC), 234, 286, 302
MongoDB, 50, 118–119, 218–220MongoHQ, 218MongoLab, 218–220monitoring applications
add-ons for, 121introduction to, 133performance tuning in, 140–145summary of, 153viewing logs in, 136–140
monitoring databases, 166Mono framework, 359–362Motorola, 407moving domains
in Clojure, 328, 343in Node.js, 318in PHP, 349in porting apps, 66, 264in Python, 311in Scala, 336
bindex.indd 480bindex.indd 480 09/01/13 6:50 PM09/01/13 6:50 PM
481
MRI (Matz’s Ruby Implementation) – outbound messages
MRI (Matz’s Ruby Implementation), 5multi-account options, 149multi-dyno applications, 47multi-ingress, 159multiple data stores, 51multiple deploys, 18–19multiple environments, 19, 90–93Murty, James, 64MVC (model-view-controller), 234, 286, 302My Apps page, 82Myspace, 411MySQL
data stores and, 158databases in. See Postgres databasesimporting from databases in, 173third-party data stores in, 208–215
mysql2psql, 173
N
naked domains, 67, 83names of applications, 82Nancy, 359–362“National Industrial Security Program Operating
Manual” (DoD 5220.22-M), 27native mobile applications, 384–386Neo4J, 50, 119.NET applications, 359–362network security, 25–26New Relic
monitoring databases in, 167in performance tuning, 141–144Python apps in, 310in session management, 297
Nezumi, 147Nginx, 347NIST 800-88 (“Guidelines for Media
Sanitization”), 27Node.js
for back end, 390–391binding to ports in, 318caching in, 317confi guration variables in, 317data stores in, 317dependencies in, 317e-mail in, 317external programs in, 318fi lesystems in, 317
logging in, 317long-running processes in, 318moving domains in, 318scaling up vs. scaling out in, 318session management in, 317shutting down in, 318for software development, generally, 311–318static assets in, 317Web containers in, 317Web servers in, 317
Nodetime, 318Noir, 326NoSQL-based data stores, 118, 217–226
O
OAuthin Database.com, 198introduction to, 49social apps and, 430–437, 440, 442
object-relational mapping (ORM)in Java, 281, 283in Python, 302in Ruby/Rails apps, 217
objectsaccess to, 182, 412in ActiveRecords, 264Beans, 281binary large, 48in Database.com, 183–188in ORM. See object-relational mapping
(ORM)in Parse, 407in Rails, 262in Scala, 328security and, 49storage of, 36–40
onStart()/onStop() methods, 291Open Java Development Kit (OpenJDK) 6,
271–272Open Web Application Security Project, 32OpenRedis, 220Oracle, 271organization-wide defaults, 199origin, 91–93ORM (object-relational mapping). See
object-relational mapping (ORM)outbound messages, 201
bindex.indd 481bindex.indd 481 09/01/13 6:50 PM09/01/13 6:50 PM
482
PaaS (platform as a service) – porting applications
P
PaaS (platform as a service), 269pace layering
application portfolio management in, 23–24
classifi cation in, 22governance in, 23introduction to, 21reliability in, 22–23security in, 22–23systems of differentiation in, 21–22, 24systems of innovation in, 22, 24systems of record in, 21, 24
packaging binary dependencies, 366–370page caching, 52–53, 261Papertrail, 121Parse, 405–407pass-throughs, 65passwords, 31performance tuning
guidelines for, 145introduction to, 140–141New Relic in, 141–144third-party data stores in, 210
Perl applications, 362–366Perl Web Server Gateway Interface (PSGI), 363personnel gaps, 20PG Backups, 169–172PHI (protected health information), 28phone numbers, 241–244PhoneGap, 388, 394PHP
binding to ports in, 348buildpacks in, 353–355caching in, 347Canvas in, 412–416confi guration variables in, 347contest app code in, 416–424data stores in, 347dependencies in, 347–348deploying apps in, 424–429e-mail in, 348external programs in, 348fi lesystems in, 346logging in, 348long-running processes in, 348–349moving domains in, 349Quick Profi ler in, 348
scaling up vs. scaling out in, 348session management in, 347shutting down in, 349for social apps, generally, 412for software development, generally,
343–349static assets in, 347Web containers in, 347Web servers in, 347
physical security, 25PicCollage, 388piggybacking, 33PINs, 248–251Pip, 19, 303–304plans for databases, 167–168platform as a service (PaaS), 269Play framework, 286–294, 328–335POM (Project Object Model), 272–275popular add-ons, 117–121port binding, 19–20porting applications
add-on data stores in, 50binding to ports in, 62–63caching in, 52–53confi guration variables in, 54–55cron jobs in, 57–59data store selection in, 48–51Database.com in, 49–50dependencies in, 56–57e-mail in, 57embedded databases in, 48ephemeral fi lesystems vs., 47existing apps in, 47–48, 51, 67–68external programs in, 61fi le uploads in, 47–48HTTPS over SSL in, 66–68introduction to, 45–46in Java, 295–297logging in, 59–61long-running processes in, 63–65moving domains in, 66multi-dyno apps in, 47multiple data stores in, 51Postgres in, 48–49Ruby apps, 263–265scaling up vs. scaling out in, 62session management in, 51–52shutting down in, 65–66storing static assets in, 54
bindex.indd 482bindex.indd 482 09/01/13 6:50 PM09/01/13 6:50 PM
483
POST – Python apps
summary of, 68–69third-party DaaS providers in, 50–51traditional fi lesystems vs., 46–48Web containers in, 55–56Web servers in, 55–56
POST, 241post deploy hooks, 80Postgres databases
adding via command-line, 85–86adding via Dashboard, 85advanced features in, 173–176automated health checks in, 160backing up, 169–171buildpacks and, 365–366cancelling queries in, 176Clojure apps and, 319continuous protection in, 159–160creating, 161–163data clips in, 173–174deleting, 168–169followers in, 164–166forking, 164Grails apps and, 338higher-availability architecture in,
160–161hstore in, 174–176importing data in, 171–173installing, 121–127introduction to, 157–159Java apps and, 290–294managing, 166mobile apps and, 393monitoring, 166Node.js apps and, 314–315PHP apps and, 345–346plans for, 167–168porting apps in, 48–49Python apps and, 305Rails apps and, 238sample app creation in, 176–179schema-free storage in, 174–176sharing information in, 173–174SQL in, 118summary of, 179third-party alternatives to,
215–217PostgresSQL (PSQL), 162, 166presentation assets, 26, 36process model, 8–10
production databasescreating apps in, 176–179followers for, 166forking, 164plans for, 167
profi les, 199–200, 348Project Object Model (POM),
272–275protected health information (PHI), 28Proximo, 26, 227–229PSGI (Perl Web Server Gateway Interface), 363PSQL (PostgresSQL), 162, 166PubNub, 389, 405, 409pull requests, 76Pusher, 14pushing apps to Heroku. See also deploying
applicationsbuildpacks and, 376–377continuous integration in, 110–114databases in, generally, 178dependencies in, 237–238git push for, 79–80introduction to, 11Postgres databases in, 197in Rails, 244–245in Ruby, 12–13in Sinatra, 98–99versioning and, 100–101WebSockets and, 63
Python appsbinding to ports in, 310caching in, 309confi guration variables in, 309data stores in, 309dependencies in, 310e-mail in, 310external programs in, 310fi lesystems in, 309introduction to, 9Java and, 268logging in, 310moving domains in, 311PHP and, 348scaling up vs. scaling out, 310session management in, 309shutting down in, 310–311static assets in, 309Web containers in, 310Web servers in, 310
bindex.indd 483bindex.indd 483 09/01/13 6:50 PM09/01/13 6:50 PM
484
quality assurance (QA) – Ruby apps
Q
quality assurance (QA), 23, 90, 202–203queries
cancelling, 176in HSQLDB, 338in jQuery Mobile, 386, 394Slow, 221in SOQL, 183SOQL (Salesforce Object Query Language),
183in Squeryl, 328
Quick Profi ler, 348
R
R14 (Memory Quota Exceeded) errors, 62
RabbitMQ, 297Rack-based frameworks, 234Rack::Cache, 262Rails apps
ActiveRecord in, 217caching, 261–262creating, 193–198, 238–244Delayed Job in, 255–261deploying to Heroku, 244–247introduction to, 8–9Postgres and, 176–179RedisGreen in, 221Ruby and, 234, 238–244testing apps in, 247–248Twilio accounts in, 244
Rake gemsClojure and, 319, 323Postgres and, 178–179Ruby and, 239
rake process type, 245, 247Ramaze, 234Ranger, 121RDS (Relational Database Service), 50, 118,
210–215record ownership, 199Redis
add-ons, 119introduction to, 50Java and, 270as third-party data store, 220–222
Redis Queue (RQ), 310Redis To Go, 48, 53, 317RedisGreen, 220–221redundancy, 7, 28–31REE (Ruby Enterprise Edition), 5refreshing databases, 203Relational Database Service (RDS)
introduction to, 50MYSQL in, 118as third-party data store, 210–215
release managementconfi guration variables in, 94–97continuous integration in, 107–114custom error pages in, 103–106deploy hooks in, 102–103downtime planning in, 103–106introduction to, 89–90multiple environments in, 90–93rolling back releases in, 100–102securing development environments in,
97–99summary of, 114versioning in, 100–102
reliability, 22–23, 28–31Resources page, 86–87REST APIs
Chatter in, 204Database.com and, 187–188, 198for front end, 398–400introduction to, 182JustOneDB in, 217storing fi les in, 203
restoring database backups, 171RhoConnect, 405, 407–408Ring, 326role hierarchies, 200rolling back releases, 100–102RQ (Redis Queue), 310Ruby apps
ActiveRecord in, 217background jobs in, 253–261caching, 261–262confi guration variables in, 94–95Delayed Job in, 253–261dependencies in, 235–238deploying to Heroku, 244–247, 251–253,
257–268installing programs for, 234–235
bindex.indd 484bindex.indd 484 09/01/13 6:50 PM09/01/13 6:50 PM
485
Ruby Enterprise Edition (REE) – security tokens
introduction to, 12–13, 233Java and, 268Kensa, 127–130on local workstations, 234–235overview of, 234porting to Heroku, 263–265on Rails, 193–198Rails framework for, 238–248RedisGreen in, 221Sinatra framework for, 248–253summary of, 265Tddium in, 107–114testing, 247–248, 253, 258–261Twilio accounts for, 244writing, 238–244, 248–251
Ruby Enterprise Edition (REE), 5Ruby Version Manager (RVM), 235RubyGems, 235run stages, 19RVM (Ruby Version Manager), 235
S
S3 (Simple Storage Service). See Amazon Simple Storage Service (Amazon S3)
S3Fox Organizer, 38Salesforce Object Query Language
(SOQL), 183Salesforce.com
Chatter by, 411compliance and, 27Database.com by. See Database.comintroduction to, 18physical security and, 25
SAML (Security Assertion Markup Language), 198–199
Sarbanes-Oxley (SOX) Act, 27SASL (Simple Authentication and Security Layer),
262saved fi les, 48sbt (Simple Build Tool), 286Scala
binding to ports in, 335buildpacks in, 358–359caching in, 334confi guration variables in, 334data stores in, 334dependencies in, 334–335
e-mail in, 335external programs in, 335fi lesystems in, 334introduction to, 268logging in, 335long-running processes in, 335moving domains in, 336scaling up vs. scaling out in, 335session management in, 334shutting down in, 335–336for software development, generally,
328–336static assets in, 334Web containers in, 334Web servers in, 334
Scalatra, 334scaling applications
in Clojure, 327, 342–343Java and, 297managing apps and, 133in Node.js, 318in PHP, 348in porting apps, 62, 264Postgres and, 153in Python, 310in Scala, 335scalability, defi ned, 20
scaling elasticity, 6scaling resources, 84–87Scheduler, 58–59, 101Schema Builder, 187–188schema-free data storage, 174–176search add-ons, 119–120Secret Access Keys, 27–28, 37Secure Shell (SSH), 26Secure Sockets Layer (SSL). See SSL (Secure Socket
Layer)security
of apps, 31–33in architecture, 25–27in Database.com, 198–199of development environments, 97–99in pace layering, 22–23in SASL, 262Spring, 297
Security Assertion Markup Language (SAML), 198–199
security tokens, 188, 198
bindex.indd 485bindex.indd 485 09/01/13 6:50 PM09/01/13 6:50 PM
486
SendGrid – Spring Security
SendGridadding, 126Clojure and, 327introduction to, 57Node.js and, 317PHP and, 348Postgres and, 87Python and, 310Scala and, 335
Sentry, 121Service Cloud, 181service-level agreements (SLAs), 29servlet containers, 55session management
in Clojure, 326in Groovy, 342in Java, 297–298Java and, 296in Node.js, 317in PHP, 347porting apps and, 51–52, 263in Python, 309in Scala, 334
shadow objects, 430–444share-nothing models, 286SharePoint, 411sharing information, 173–174, 199–200shearing layers, 21shutting down
in Clojure, 327, 343introduction to, 20Java and, 297in Node.js, 318in PHP, 349in porting apps, 65–66in Python, 310–311in Ruby, 264in Scala, 335–336
SIGTERM. See also shutting down, 7, 65–66, 264
Simone, John, 284Simple Authentication and Security Layer
(SASL), 262Simple Build Tool (sbt), 286Simple Logging Facade for Java
(SLF4J), 270Simple Storage Service (Amazon S3).
See Amazon Simple Storage Service (Amazon S3)
Sinatra appsbuildpacks in, 359–362caching, 262Cloudant and, 226deploying to Heroku,
251–253installing, 235introduction to, 98, 108, 234Kensa and, 128porting to Heroku, 263Ruby and, 248–253testing, 253writing, 248–251
SLAs (service-level agreements), 29SLF4J (Simple Logging Facade for
Java), 270Slow Queries tab, 221slugs, 12–13, 352SOAP, 198, 203social applications
Canvas, 412–416Chatter API for, 429–444contests in, 416–424Database.com for,
430–444deploying to Heroku,
424–429for Facebook, generally, 412introduction to, 411–412PHP for, generally, 412shadow objects in,
430–444summary of, 444
social graphs, 204Socket.IO, 318software development cycle, 89–90software development languages. See languages
for software developmentsoftware erosion, 10Solr, 120SOQL (Salesforce Object Query
Language), 183SOX (Sarbanes-Oxley)
Act, 27Sphinx, 120Spring, 336Spring Framework, 281–286Spring Roo, 269, 281–286Spring Security, 297
bindex.indd 486bindex.indd 486 09/01/13 6:50 PM09/01/13 6:50 PM
487
SQL-based data stores – third-party data stores
SQL-based data stores, 158–159SQL
data store add-ons in, 118databases in. See Postgres databasesdatabases in, generally, 207MySQL, 158, 173, 208–215PostgresSQL, 162, 166third-party data stores in, 207–217
SQLite, 236–237Squeryl, 328SSH (Secure Shell), 26SSL (Secure Socket Layer)
Endpoint in, 34–36introduction to, 33piggybacking on Heroku’s certifi cate in, 33Postgres and, 166
STaaS (storage as a service), 26, 36Stackato, 352stack-layer security, 26StackMob, 405–406staging applications, 91–92staging databases, 202standard input (STDIN), 9standard output (STDOUT), 10Standard users, 198Starman, 363startup, 20stateless processes, 19static assets
in Amazon S3, 36–40in architecture, 36–43in Clojure, 326in Groovy, 342in Node.js, 317in PHP, 347porting apps and, 263in Python, 309in Scala, 334in session management, 296storage of, 18, 54
Stats tab, 219status page, 147–148status.heroku.com, 29STDIN (standard input), 9STDOUT (standard output), 10StillAlive, 121storage
in Amazon S3. See Amazon Simple Storage Service (Amazon S3)
of data. See data storesof Database.com fi les, 203of fi les, defi ned, 192of static assets, 18, 54usage of, 191–192
storage as a service (STaaS), 26, 36Streaming API, 182Subversion (SVN), 74Sun Systems, 268Support Cases, 210supported languages. See languages for software
developmentSVN (Subversion), 74Symphony, 347System Overview page, 191systems of differentiation, 21–22, 24systems of innovation, 22, 24systems of record, 21, 24
T
tag library descriptor (TLD) fi les, 294Tddium, 107–114temporary fi les, 48test databases, 202–203testing applications
in Delayed Job, 258–261in Rails, 247–248in Ruby, 247–248, 253, 258–261in Sinatra, 253
Thin, 15third-party add-ons, 32–33third-party DaaS providers, 50–51third-party data stores
Amazon Relational Database Service, 210–215
Apache Cassandra, 119, 222–224Apache CouchDB, 50, 119, 224–226attaching existing, 226–229ClearDB. See ClearDBintroduction to, 207JustOneDB, 215–217MongoDB, 218–220MySQL options for, 208–215NoSQL-based options for, 217–226Postgres alternatives for, 215–217Redis, 220–222SQL-based options for, 207–217summary of, 229
bindex.indd 487bindex.indd 487 09/01/13 6:50 PM09/01/13 6:50 PM
488
Tiggzi – WSGI (Web Server Gateway Interface)
Tiggzi, 394–402, 403time gaps, 20TLD (tag library descriptor) fi les, 294Tomcat, 56, 269, 281–286tool gaps, 20Toolbelt
Foreman in, 75–76Git in, 74–75Heroku client in, 76installing, 74–76
toolkits, 405–409Tools tab, 219Top Ten Project, 32Torvalds, Linus, 11transparency, 29–31Treasure Data, 49, 50triggers, 201–202twelve-factor applications, 18–20Twilio
Rails apps and, 238–244Ruby apps and, 244Sinatra apps and, 248–253
TwiML, 241
U
UAT (user acceptance testing), 23, 90uninterrupted power supply (UPS), 25URLs. See cURLUS-East region, 41, 51, 117user acceptance testing (UAT), 23, 90user interfaces (UIs), 385–386, 388, 402Users tab, 219
V
V8 JavaScript engine, 311valet keys, 198validation rules, 200–201Varnish, 15, 261version control, 11–12, 100–102views, 250virtual environments, 302–303virtual machines (VMs). See also Java Virtual
Machine (JVM), 75virtual private networks (VPNs), 11, 26VMs (virtual machines). See also Java Virtual
Machine (JVM), 75VPNs (virtual private networks), 11, 26
Vulcanbuildpacks and, 355, 366–375introduction to, 347
W
Wall, Larry, 362WAR fi les, 294–295Web containers
in Clojure, 326, 342in Node.js, 317in PHP, 347in porting apps, 55–56, 263in Python, 310in Scala, 334in session management, 296
web process type, 245Web Server Gateway Interface (WSGI), 302Web servers
in Clojure, 326, 342in Node.js, 317in PHP, 347in porting apps, 55–56, 263in Python, 310in Scala, 334in session management, 296
Webapp Runner, 284–285Weblogic, 268WebSockets, 389WebSolr, 120WebSphere, 55, 268Windows
Java and, 271production environments in, 90stacks in, 5Toolbelt on, 73, 76WampServer, 344
Workbench, 189–191worker process type, 245workfl ow rules, 201–202Worqbench, 148writing applications
containerless, 275–281in Play framework, 286–294in Rails, 238–244in Ruby, 238–244, 248–251in Sinatra, 248–251in Spring Framework, 281–286
WSGI (Web Server Gateway Interface), 302
bindex.indd 488bindex.indd 488 09/01/13 6:50 PM09/01/13 6:50 PM
489
Xcode Developer Tools – Zerigo DNS
X
Xcode Developer Tools, 272XDebug, 348Xeround
introduction to, 48MYSQL and, 118PHP apps in, 347in porting apps, 50–51SQL-based data stores
and, 158X-Forwarded-Proto, 68
XML, 241–244XSS (cross-site scripting), 31
Y
YAML, 94, 358Yum, 272
Z
Zend, 347Zerigo DNS, 134–135
bindex.indd 489bindex.indd 489 09/01/13 6:50 PM09/01/13 6:50 PM