page:recipes:marketplace:rails:product media

Host marketplace with Rails: public product media

Deploy a marketplace built with Rails on Ample using the public media library pattern. Compute runs the app in an isolated microVM behind a public HTTPS URL, a managed PostgreSQL 16 database is auto-provisioned and injected as DATABASE_URL, a private S3-compatible bucket holds objects with credentials delivered as encrypted environment variables, and a published bucket serves public assets from the CDN host. Verified on Rails: an object written to a published bucket with an immutable Cache-Control header, a mapping row, and the CDN URL serving it publicly. Not separately tested: your media processing, object layout and cache policy; treat the marketplace-specific behavior as your application code.

Representative Queries

Resource Requirements

Infrastructure Requirements

  1. Compute
    Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
  2. Postgres
    Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.
  3. S3-compatible object storage
    Buckets are S3-compatible with issued credentials; PutObject and GetObject are verified by canary. Other S3 operations are not verified.
  4. CDN
    The CDN host serves objects from published buckets. It does not front app compute and is not a cache or key-value store.

Execution Status

Ready

Prerequisites

  1. A Rails project that builds and starts with the documented commands (bundle install into vendor/bundle from Gemfile.lock (development and test groups skipped), then Puma via rails server reading PORT on the ruby-3.4 template with RAILS_ENV=production)
  2. A PostgreSQL driver reading DATABASE_URL at runtime (auto-provisioned when omitted, or supplied with --env)
  3. A bucket from ample bucket create with its credentials passed as encrypted S3_* environment variables and a second, published bucket for public assets (CDN_*)
  4. An Ample account token with servers:write, databases:read, buckets:read

Workflow Steps

  1. Build and start
    bundle install into vendor/bundle from Gemfile.lock (development and test groups skipped), then Puma via rails server reading PORT on the ruby-3.4 template with RAILS_ENV=production.
  2. Implement the pattern on PostgreSQL
    The fixture's module implements public media library: an object written to a published bucket with an immutable Cache-Control header, a mapping row, and the CDN URL serving it publicly.
  3. Wire object storage
    Create the bucket(s), then pass endpoint, region, bucket and keys as --env values.
  4. Deploy
    Run the synchronous deploy once and read the result.
  5. Verify
    Fetch the live URL and the pattern self-test route(s) from the example; then run your own checks.

Success Checks

  1. app responds on its public URL
    Path: /
    Expect: ample canary rails patterns
  2. public-media-library self-test
    Path: /p/public-media-library
    Expect: a CDN URL whose content is served publicly.

Limitations

Cost Estimate

Evidence Summary

Canary Run