This is the CocoaPods search engine repo, please direct CocoaPods issues to the main CocoaPods repository.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
diagrams
lib
log
spec
tmp/pids
.gitignore
.kick
.rubocop.yml
.rubocop_cocoapods.yml
.rubocop_todo.yml
.ruby-version
.travis.yml
20150131-hanke_best_memory.txt
ARCHITECTURE.md
EXPERIMENTS.md
Gemfile
Gemfile.lock
Procfile
README.textile
Rakefile
api_helpers.rb
app.rb
config.ru
issues.txt
mem-startup.txt
memory_usage.txt
performance.txt
test.dump
test.env
unicorn.rb

README.textile

Search Engine Notes

Developing

Installation

  • bundle install
  • gem install foreman
  • Create a trunk_cocoapods_org_test table in a Postgres DB.

Run locally with foreman

  • bundle exec foreman check
  • bundle exec foreman start

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

  • All tests: bundle exec rake
  • A single test: LOAD_TEST_DB=absolutely bundle exec bacon spec/...../.._spec.rb

Deploying to Heroku

  • git push heroku master

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

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:

  1. heroku config:set HOOK_PATH=some_other_garbled_hook_path
  2. Update the post-receive-hook in the Specs repo to the new garbled path.

Notes

We have enabled memory logging using the instructions from:

  • https://devcenter.heroku.com/articles/log-runtime-metrics

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