[racket-dev] dependencies and racket

From: Daniel Farina (daniel at heroku.com)
Date: Fri Dec 30 21:11:53 EST 2011

On Thu, Dec 29, 2011 at 8:07 PM, Robby Findler
<robby at eecs.northwestern.edu> wrote:
> I think that a minor variation on Neil's strategy should not be too
> difficult to do (but I'll certainly agree that it is not an ideal
> situation). What you'd do is first just download (via the "Bam" method
> below :) the planet packages you want. Then, if you look inside this
> directory:
>   (build-path (find-system-path 'addon-dir)
>               "planet"
>               "300")
> you should find some files with extensions ".plt". Re-build that same
> portion of the directory structure to contain those files in the
> deployment environment, and then set the PLTPLANETURL environment
> variable to something bogus.

That looks like a pretty reasonable way to get started. Thanks for
telling me about the build-path and find-system-path operators, and
the bogusifying of the PLT URL to prevent accidental hammering.

> Also, FWIW, I maintain, in the weakest sense of the word, the current
> planet service. (All I really do is react to emergencies that break
> things.) Jay and Eli are looking into a whole new thing and have been
> talking about it for more than a year, I believe, so hopefully plans
> are firming up. Their system should be able to support this kind of
> use-case much more effectively. I think that kind of thing is designed
> in for them.

I'd be interested in reading their current thoughts.  Having used now
a small stable of dependency management systems, my favorite, by far,
is "bundler" for Ruby.  It can handle upgrades, version pinning,
allowing for auditing in upgrades of packages, preventing an executed
program from using libraries that are not in its manifest (to prevent
'accidental' dependency), bin-directory generation for packages that
install command line programs, and it will transitively consider all
version requirements of all libraries to try and select the latest
version -- should any one version exist -- that can satisfy all the
constraints.  Above all, it does that without being burdensome to use
or understand.

One could do worse than implementing the same thing, but for Racket.


Posted on the dev mailing list.