Skip to content
This repository has been archived by the owner on Apr 12, 2020. It is now read-only.

Latest commit

 

History

History
84 lines (48 loc) · 1.94 KB

README.pod

File metadata and controls

84 lines (48 loc) · 1.94 KB

CPAN Grep

This is the code behind http://grep.cpan.me. Unless you want to add something you probably want to use the site, not try and install this ;-)

The default development configuration will index a sample CPAN from fakecpan. Indexing the whole CPAN doesn't take long, although you'll need around 4GB of RAM spare to get a decent level of performance.

Quick start

For a very quick development setup you should be able to:

  • Ensure you have Perl 5.14 or later

  • Install redis

    You just need a redis-server binary around, run-test below will start it for you.

  • Run the following:

    cpanm --installdeps .
    tools/run-test
  • Visit http://localhost:5000

  • Hack!

    Starman will pick up changes automatically, so web frontend changes should be picked up right away.

Components

If you want to work on the indexing or other aspects you might need to run these, to start with run-test may well be enough though.

  • cpangrep-index

    Run this to start with:

    bin/cpangrep-index [--cpan_dir /path/to/cpan --slab_dir /data/cpangrep/extract]

    If you omit the --cpan_dir and --slab_dir options you'll get the fakecpan configured in etc/config and shipped with this.

  • WWW::CPANGrep

    The web frontend. Run with:

    starman -Ilib lib/WWW/CPANGrep.pm

    (or other plack server.)

    There's also a version that wraps this in Plack::Debug in debug.psgi.

  • cpangrep-matcher

    Backend workers that do the matching, based on a redis queue. This should be running along with the web frontend, all the time:

    bin/cpangrep-matcher
  • Redis

    A Redis server (or several for the live version) are used for queuing jobs and also resolving matches.

Deployment

Currently the "live" tag refers to the version that is live. To push a new version:

git tag -f live
git push --tags

(See the handler for /githook for how this works.)