h1. Search Engine Notes
h2. Developing
h3. Installation
h3. Run locally with foreman
h3. Run tests
Disclaimer: Currently, the integration tests depend on a specific production DB dump. To download these, you currently need id/secret keys for an S3 instance, which only the CP team has access to. However, you can run specific specs which only require @spec_helper_without_db@. For example: @bundle exec bacon spec/lib/models/pod_spec.rb@
h3. Deploying to Heroku
h3. ENV variables
You need to set the HOOK_PATH env variable for the Github post-receive-hook (see below for more detail).
@heroku config:set HOOK_PATH=...@
We also do not load test or development.
@heroku config:add BUNDLE_WITHOUT="development:test"@
We tune some GC variables.
@heroku config:add RUBY_GC_HEAP_INIT_SLOTS=600000@
@heroku config:add RUBY_GC_HEAP_FREE_SLOTS=600000@
@heroku config:add RUBY_GC_HEAP_GROWTH_FACTOR=1@
@heroku config:add RUBY_GC_HEAP_GROWTH_MAX_SLOTS=300000@
h4. HOOK_PATH
We use one ENV variable (@HOOK_PATH@) to set the hook path we use in Trunk's post-receive-hook to update the search engine's index: @heroku config:add HOOK_PATH=some_garbled_hook_path@. This calls an URL on the app which causes it to update the search engine index for the updated pod from the Trunk database. (Note: It's not secure against brute force, man-in-the-middle etc., but a simple security to discourage DoS)
To change HOOK_PATH:
h3. Notes
We have enabled memory logging using the instructions from:
h3. Current Heroku Labs Features
=== App Features (search-cocoapods-org) [ ] http-end-to-end-continue Send 100-continue headers to the backend [ ] http-session-affinity Enable session affinity for all requests [ ] http-shard-header Turn shard headers on [+] log-runtime-metrics Emit dyno resource usage information into app logs