page:recipes:vendor portal:rails:tenant workspaces

Host vendor portal with Rails: tenant-scoped workspaces

Summary

Deploy a vendor portal built with Rails on Ample using the multi-tenant relational data 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. Verified on Rails: a tenant column on every row and query, with a cross-tenant read returning nothing (tenant_isolation=ok). Not separately tested: your tenant model, membership and per-tenant authorization; treat the vendor portal-specific behavior as your application code.

Representative Queries

Resource Requirements

Infrastructure Requirements

Framework

Rails

Workload

Vendor portal

Release Status

published

Support Status

verified

Execution Status

ready

Prerequisites

Tested Configuration

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. The server must bind 0.0.0.0 on PORT.
  2. Implement the pattern on PostgreSQL
    The fixture's module implements multi-tenant relational data: a tenant column on every row and query, with a cross-tenant read returning nothing (tenant_isolation=ok). Copy the approach into your schema; keep migrations idempotent and run them with --release-command.
  3. Deploy
    Run the synchronous deploy once and read the result (exit 0 live, 1 failed, 2 blocked). Re-running with no change is a no-op.
    ample deploy . --name  --public
    
  4. Verify
    Fetch the live URL and the pattern self-test route(s) (/p/multi-tenant-relational-data) from the example; then run your own checks. On failure read ample logs --kind build then --kind runtime.
    ample logs  --kind build
    

Limitations

Cost Estimate

Next Actions

  1. Browse the catalog index
    • Action ID: browse-catalog
    • Method: GET
    • Path: /v1/catalog
  2. Search published recipes by intent, stack and constraints
    • Action ID: search-recipes
    • Method: POST
    • Path: /v1/catalog/search
    • Parameters: {"body":{"limit":5,"query":"Host vendor portal with Rails: tenant-scoped workspaces"}}
  3. Prepare a side-effect-free deployment plan for an authorized project
    • Action ID: plan:page:recipes:vendor-portal:rails:tenant-workspaces
    • Method: POST
    • Path: /v1/catalog/plan
    • Parameters: {"body":{"inputs":{},"projectId":"","recipeId":"page:recipes:vendor-portal:rails:tenant-workspaces","recipeRevision":"r1"}}
  4. Read the existing agent authentication setup
    • Action ID: auth-setup
    • Method: GET
    • Path: /mcp/setup
  5. Browse Vendor portal
    • Action ID: browse:workload:vendor-portal
    • Method: GET
    • Path: /v1/catalog/nodes/workload%3Avendor-portal
  6. Browse Rails
    • Action ID: browse:stack:framework-rails
    • Method: GET
    • Path: /v1/catalog/nodes/stack%3Aframework-rails
  7. Browse Multi-tenant relational data
    • Action ID: browse:pattern:multi-tenant-relational-data
    • Method: GET
    • Path: /v1/catalog/nodes/pattern%3Amulti-tenant-relational-data
  8. Browse Deploy web app
    • Action ID: browse:intent:deploy-web-app
    • Method: GET
    • Path: /v1/catalog/nodes/intent%3Adeploy-web-app