Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.
Updated: August 9, 2026
By Matic BončinaFounder
✓Proofread & verified
Setup Ruby App registers a Ruby application under your cPanel account and hands it to Phusion Passenger, which boots your Rack app and keeps it running. You give it three things: a Ruby version, a directory, and the address you want it served from.
Ruby is included on BONFIRE, BLAZE and INFERMO. SPARK and FLAME don’t come with it, so those plans need an upgrade before any of this works.
You choose the version per application, so two apps in the same account can run different ones. The setup form currently offers:3.2 (preselected), 3.1, 3.0, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2Take the newest one your Gemfile supports. If you need something that isn’t in the list, open a ticket and we’ll tell you whether we can add it.
Don’t run rails server. Don’t run rackup. Passenger boots the Rack stack itself.
Booting your own server inside the app, whether that’s WEBrick through a Rack handler or Puma started by hand, stops Passenger claiming the app. Let config.ru be the entry point and nothing else.
Each app gets its own gem environment under ~/rubyvenv/<app-directory>/<version>/. Your login shell doesn’t use it by default, which is why a gem can be installed and still be missing at runtime.The app row prints the exact line to fix that. Copy it from Command for entering to virtual environment and run it before anything else:
Passenger couldn’t boot the Rack app. Check config.ru exists in the app directory, that your gems are installed, and that the Ruby version on the app row matches what your Gemfile asks for. Restart after each change.
Gem 'X' not found at runtime, but bundle list shows it
Your shell and the app are reading different gem paths. Activate the app’s environment first, then reinstall:
Then Restart the app so it picks the gems up.To pin the app to its lockfile, use bundle config set --local deployment true. The older bundle install --deployment flag was deprecated in Bundler 2.1.
Asset precompilation runs out of memory
assets:precompile is the hungriest step in a Rails deploy. Compile locally and copy public/assets/ up, or cap the JavaScript runtime:
Passenger’s default start timeout is 90 seconds, and a long chain of Rails initializers can outrun it. Trim what runs at boot first, since that helps every request afterwards. If the app genuinely needs longer, open a ticket and we’ll look at the timeout for you.
Gemfile.lock platform mismatch
Bundler complains about a missing platform when installing. Add the linux platform to the lockfile from your dev machine:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Noxity Knowledgebase","colors":{"primary":"#B83553","light":"#FF3A6D","dark":"#B83553"},"logo":{"light":"https://mintcdn.com/noxity/AKndteo9-AwoOj4e/logo/dark.png?fit=max\u0026auto=format\u0026n=AKndteo9-AwoOj4e\u0026q=85\u0026s=76f2b0618a4cdbd4376d51ddab0477f0","dark":"https://mintcdn.com/noxity/AKndteo9-AwoOj4e/logo/light.png?fit=max\u0026auto=format\u0026n=AKndteo9-AwoOj4e\u0026q=85\u0026s=c835ef08ea2abe8acf6a38c869c730bf"},"favicon":"https://mintcdn.com/noxity/AKndteo9-AwoOj4e/logo/favicon.png?fit=max\u0026auto=format\u0026n=AKndteo9-AwoOj4e\u0026q=85\u0026s=a02d7b87c0b53b9ac4bf89e3d17447b6","appearance":{"default":"dark","strict":true},"background":{"color":{"light":"#EFEBE3","dark":"#131A28"}},"navbar":{"links":[{"href":"https://noxity.io/blog","label":"Blog"},{"href":"https://status.noxity.io","label":"Status"},{"href":"https://noxity.io/support","label":"Support"}],"primary":{"type":"button","label":"Members Area","href":"https://members.noxity.io"}},"footer":{"socials":{"website":"https://noxity.io","discord":"https://community.noxity.io","twitter":"https://twitter.com/noxityio","youtube":"https://www.youtube.com/@noxityio","github":"https://github.com/noxitylabs","instagram":"https://www.instagram.com/noxityio","linkedin":"https://www.linkedin.com/company/noxity"}},"fonts":{"heading":{"family":"Manrope","weight":700},"body":{"family":"Manrope","weight":400}},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{},"latex":false},"errors":{"404":{"redirect":false,"title":"Lost in the data centre","description":"You found a URL we don't serve. The page either moved when we ported the legacy knowledgebase, or a link somewhere got mangled in transit. Try the **search at the top**, the suggested matches below, or jump straight to one of these:\n\n\u003ca href=\"/welcome\" className=\"kb-pill\">Home\u003c/a> \u003ca href=\"/web-hosting/overview\" className=\"kb-pill\">Web Hosting\u003c/a> \u003ca href=\"/domains/overview\" className=\"kb-pill\">Domains\u003c/a> \u003ca href=\"/home/essentials/support\" className=\"kb-pill\">Open a ticket\u003c/a>"}},"contextual":{"options":["chatgpt","claude","perplexity"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"browser","href":"https://noxity.io"},{"anchor":"Community","icon":"discord","href":"https://discord.noxity.io"},{"anchor":"Linktree","icon":"bullseye-pointer","href":"https://tree.noxity.io"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@noxityio"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"noxity","hasAudioNarration":false,"actualSubdomain":"noxity","customDomains":["help.noxity.io"],"gitSource":{"type":"github","owner":"noxitylabs","repo":"knowledgebase","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a78ab5b4caa9bc1ddd92dd8","collectionId":"4c19acc7-e123-4942-8877-bd13536bd445","schemaVersion":"v2","latestBuiltDeploymentHistoryId":"6a78ab5b4caa9bc1ddd92dd8"},"feedback":{"thumbs":true,"issues":false,"edits":false},"entitlements":{},"buildId":"6a78abf74caa9bc1ddd92e65:success","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"English","count":228},{"language":"default","tag":"Web Hosting","count":106},{"language":"default","tag":"cPanel Control Panels","count":98},{"language":"default","tag":"Domains","count":52},{"language":"default","tag":"Registrations","count":33},{"language":"default","tag":"TLDs","count":25},{"language":"default","tag":"Members Area","count":21},{"language":"default","tag":"How To Guides","count":20},{"language":"default","tag":"Email Management","count":18},{"language":"default","tag":"Domain Management","count":15}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"html.dark{--shiki-dark-bg:#1A2436}html.dark .accordion,html.dark .code-block-background,html.dark .dark\\:bg-codeblock{background-color:#1a2436}html.dark .prose a:not(.not-prose):hover,html.dark a.link:not(.not-prose):hover{color:rgb(var(--primary-light)/1);border-bottom-color:rgb(var(--primary-light)/1)}html a.not-prose:hover{border-bottom-color:transparent!important}.mdx-content{z-index:22}html.dark .accordion:hover{border-color:rgb(var(--primary-light)/.45)}html.dark .accordion summary:hover{background-color:rgb(var(--primary-light)/.07)}html.dark .feedback-toolbar a,html.dark .feedback-toolbar button{background-color:#131a28;color:#d3cfd0;border-color:rgba(255,255,255,.07)}html.dark .feedback-toolbar a:hover,html.dark .feedback-toolbar button:hover{background-color:rgba(229,231,235,.05);border-color:rgba(255,255,255,.07);color:#e5e7eb}.kb-pill{display:inline-block;padding:5px 14px;margin:3px 4px 3px 0;border-radius:999px;border:1px solid rgba(0,0,0,.12);background-color:rgba(0,0,0,.03);color:#24292f;font-size:13px;font-weight:500;text-decoration:none!important;border-bottom:1px solid rgba(0,0,0,.12)!important;transition:all .15s ease}html.dark .kb-pill{border-color:rgba(255,255,255,.12);background-color:rgba(255,255,255,.04);color:#e5e7eb;border-bottom-color:rgba(255,255,255,.12)!important}.kb-pill:hover{border-color:rgb(var(--primary)/.5);background-color:rgb(var(--primary)/.08);color:rgb(var(--primary));border-bottom-color:rgb(var(--primary)/.5)!important}html.dark .kb-pill:hover{border-color:rgb(var(--primary-light)/.55);background-color:rgb(var(--primary-light)/.1);color:rgb(var(--primary-light));border-bottom-color:rgb(var(--primary-light)/.55)!important}"}],"page":{"pagePath":"web-hosting/virtual-containers/ruby","slug":"/web-hosting/virtual-containers/ruby","pageMetadata":{"title":"Ruby","description":"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.","icon":"gem","keywords":["ruby","ruby selector","passenger","rails","bundler","rack","setup ruby app","config.ru"],"href":"/web-hosting/virtual-containers/ruby"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Info,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(`div`,{className:`not-prose mint-mb-8 mint-pb-6 mint-border-b mint-border-gray-200 dark:mint-border-gray-800`,children:[_jsx(`div`,{className:`mint-mb-3 mint-text-sm mint-text-gray-500 dark:mint-text-gray-400`,children:_jsx(_components.p,{children:`Updated: August 9, 2026`})}),_jsxs(`div`,{className:`mint-flex mint-flex-wrap mint-items-center mint-gap-x-5 mint-gap-y-3`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-3`,children:[_jsx(OptimizedImage,{src:`https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=236856f5898caae2ec034701c8cb2290`,alt:`Matic Bončina`,className:`mint-w-10 mint-h-10 mint-rounded-full mint-object-cover`,\"data-og-width\":`256`,width:`256`,\"data-og-height\":`256`,height:`256`,\"data-path\":`images/team/matic.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?w=280\u0026fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=8c85c59fdf3a3735fea6f05ea1be54b2 280w, https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?w=560\u0026fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=081f83057fb24086dcba03a85efa3cd9 560w, https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?w=840\u0026fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=b10e615d7615cafd06f262fc676b6913 840w, https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?w=1100\u0026fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=a348763d27029aa8c314ec2ec1545689 1100w, https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?w=1650\u0026fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=f8a35f42d49d0cf59250368250a2e0af 1650w, https://mintcdn.com/noxity/7AGDPHJNWXOTggDq/images/team/matic.png?w=2500\u0026fit=max\u0026auto=format\u0026n=7AGDPHJNWXOTggDq\u0026q=85\u0026s=0748e972f61065b371e472599c87afbe 2500w`}),_jsxs(`div`,{className:`mint-flex mint-flex-col mint-leading-tight`,children:[_jsx(`span`,{className:`mint-text-sm mint-text-gray-900 dark:mint-text-gray-100`,children:_jsxs(_components.p,{children:[`By `,_jsx(`strong`,{className:`mint-font-semibold`,children:`Matic Bončina`})]})}),_jsx(`span`,{className:`mint-text-sm mint-text-gray-500 dark:mint-text-gray-400`,children:_jsx(_components.p,{children:`Founder`})})]})]}),_jsx(`div`,{className:`mint-ml-auto`,children:_jsxs(`span`,{className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-text-[11px] mint-tracking-wide mint-uppercase mint-font-semibold mint-px-2.5 mint-py-1 mint-rounded-full mint-bg-emerald-100 mint-text-emerald-700 dark:mint-bg-emerald-900 dark:mint-text-emerald-300`,children:[_jsx(`span`,{className:`mint-inline-flex mint-items-center mint-justify-center mint-w-3.5 mint-h-3.5 mint-rounded-full mint-border mint-border-current mint-text-[9px] mint-font-bold mint-leading-none`,children:_jsx(_components.p,{children:`✓`})}),_jsx(_components.p,{children:`Proofread \u0026 verified`})]})})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Setup Ruby App`}),` registers a Ruby application under your cPanel account and hands it to Phusion Passenger, which boots your Rack app and keeps it running. You give it three things: a Ruby version, a directory, and the address you want it served from.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Ruby is included on `,_jsx(_components.strong,{children:`BONFIRE`}),`, `,_jsx(_components.strong,{children:`BLAZE`}),` and `,_jsx(_components.strong,{children:`INFERMO`}),`. `,_jsx(_components.strong,{children:`SPARK`}),` and `,_jsx(_components.strong,{children:`FLAME`}),` don’t come with it, so those plans need an upgrade before any of this works.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`ruby-versions`,children:`Ruby versions`}),`\n`,_jsx(_components.p,{children:`You choose the version per application, so two apps in the same account can run different ones. The setup form currently offers:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`3.2`}),` (preselected), `,_jsx(_components.code,{children:`3.1`}),`, `,_jsx(_components.code,{children:`3.0`}),`, `,_jsx(_components.code,{children:`2.7`}),`, `,_jsx(_components.code,{children:`2.6`}),`, `,_jsx(_components.code,{children:`2.5`}),`, `,_jsx(_components.code,{children:`2.4`}),`, `,_jsx(_components.code,{children:`2.3`}),`, `,_jsx(_components.code,{children:`2.2`})]}),`\n`,_jsxs(_components.p,{children:[`Take the newest one your `,_jsx(_components.code,{children:`Gemfile`}),` supports. If you need something that isn’t in the list, open a ticket and we’ll tell you whether we can add it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`set-up-an-app`,children:`Set up an app`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open Setup Ruby App`,children:[_jsxs(_components.p,{children:[`From cPanel home, scroll to `,_jsx(_components.strong,{children:`Software`}),` and click `,_jsx(_components.strong,{children:`Setup Ruby App`}),`.`]}),_jsx(Frame,{caption:`cPanel home → Software → Setup Ruby App`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=934b3aa03edf0c4e314ed6da513c2464`,alt:`The Software section of cPanel home, with Setup Ruby App in the third row beside Setup Node.js App and Setup Python App`,\"data-og-width\":`1966`,width:`1966`,\"data-og-height\":`632`,height:`632`,\"data-path\":`images/web-hosting/virtual-containers/ruby/open.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?w=280\u0026fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=625466a77b8962f1535599cd3b89b330 280w, https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?w=560\u0026fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=12f934e387669d13efc42cb634f605ec 560w, https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?w=840\u0026fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=e3fcb8d9ea0dec3c2457255cc6b87b3f 840w, https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?w=1100\u0026fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=0669eaa66d124bddbf9d06b9975318d6 1100w, https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?w=1650\u0026fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=851bb133f277d7049274c88d1f1348bf 1650w, https://mintcdn.com/noxity/FDut2vCNmaFMl9Yx/images/web-hosting/virtual-containers/ruby/open.png?w=2500\u0026fit=max\u0026auto=format\u0026n=FDut2vCNmaFMl9Yx\u0026q=85\u0026s=437c24cf3a14c2437f65d9e1c3bd9d68 2500w`})})]}),_jsxs(Step,{title:`Fill in the form`,children:[_jsxs(_components.p,{children:[`The page opens straight onto `,_jsx(_components.strong,{children:`Setup new application`}),`, with three things to set:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ruby version`}),`: the interpreter this app runs on.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`App Directory`}),`: a folder under your home directory, such as `,_jsx(_components.code,{children:`myapp`}),`. Your `,_jsx(_components.code,{children:`config.ru`}),` and `,_jsx(_components.code,{children:`Gemfile`}),` go here.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`App Domain/URI`}),`: choose a domain, then add a path if you want one. Leave the path box empty to serve the app at the domain root.`]}),`\n`]}),_jsx(Frame,{caption:`Setup Ruby App → Setup new application`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=a2175ae7b73ed50a68fe03b0d2f9a258`,alt:`The Setup new application form with the Ruby version dropdown set to 3.2, an empty App Directory field under /home, and the App Domain/URI domain picker`,\"data-og-width\":`2504`,width:`2504`,\"data-og-height\":`336`,height:`336`,\"data-path\":`images/web-hosting/virtual-containers/ruby/setup-form.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?w=280\u0026fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=ba6a7e778ec36bfdc25039348f77217e 280w, https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?w=560\u0026fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=1346d8986cb06d3f5c9fcbe492d8128d 560w, https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?w=840\u0026fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=02322b110b531d9854d1faed23ce73ab 840w, https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?w=1100\u0026fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=477523918a6fd2df4470f4f0c4290129 1100w, https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?w=1650\u0026fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=02588e1d4d705bbd6f2bd0e227ad7901 1650w, https://mintcdn.com/noxity/iM2LWklUDakbufYK/images/web-hosting/virtual-containers/ruby/setup-form.png?w=2500\u0026fit=max\u0026auto=format\u0026n=iM2LWklUDakbufYK\u0026q=85\u0026s=7863a89cc85adc93942d097ad52bd5ae 2500w`})})]}),_jsx(Step,{title:`Click Setup`,children:_jsxs(_components.p,{children:[`The app is created and listed under `,_jsx(_components.strong,{children:`Existing applications`}),` at the bottom of the same page.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`manage-an-app`,children:`Manage an app`}),`\n`,_jsxs(_components.p,{children:[`Apps you’ve already created appear under `,_jsx(_components.strong,{children:`Existing applications`}),`, below the setup form. Each one gets a row of its own.`]}),`\n`,_jsx(Frame,{caption:`Setup Ruby App → Existing applications`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=3dbcabb1a874a8a8298e5e843a92b36d`,alt:`An existing Ruby application row showing App Directory and App URI with Edit links, a Ruby version dropdown, a modules show link, an Execute command box with a Run button, the source activate command, and the Update, Reset, Restart and Remove buttons`,\"data-og-width\":`2560`,width:`2560`,\"data-og-height\":`600`,height:`600`,\"data-path\":`images/web-hosting/virtual-containers/ruby/manage.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?w=280\u0026fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=468764eeacc1532b70e2de69c0fd039f 280w, https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?w=560\u0026fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=64a2c78986c8eafab436e22ce0ed47bf 560w, https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?w=840\u0026fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=a74c4fbab6f93296a16e83e6cf52e355 840w, https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=1aa4086e51793cfba436df97ccd2a7f7 1100w, https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=cde00f976c82f1411deb7ca87b4e371e 1650w, https://mintcdn.com/noxity/k9-4-7INasC_37FL/images/web-hosting/virtual-containers/ruby/manage.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k9-4-7INasC_37FL\u0026q=85\u0026s=8ea9b95ac406c6a188fea4923be00c9a 2500w`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Control`}),_jsx(_components.th,{children:`What it’s for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`App Directory`}),`, `,_jsx(_components.strong,{children:`App URI`})]}),_jsxs(_components.td,{children:[`Each carries an `,_jsx(_components.strong,{children:`Edit`}),` link, for moving the app or changing where it’s served.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Ruby version`})}),_jsxs(_components.td,{children:[`Change the app’s Ruby here, then `,_jsx(_components.strong,{children:`Update`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`modules`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`show`}),` lists the gems installed for this app.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Execute command`})}),_jsxs(_components.td,{children:[`Runs a one-off command against this app and prints the result. The field takes letters, digits and `,_jsx(_components.code,{children:`/_-.,\"~>\u003c`}),` only.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Command for entering to virtual environment`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`source ...`}),` line to paste into SSH, so your shell reaches the same gems the app does.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Update`}),`, `,_jsx(_components.strong,{children:`Reset`}),`, `,_jsx(_components.strong,{children:`Restart`}),`, `,_jsx(_components.strong,{children:`Remove`})]}),_jsx(_components.td,{children:`Save your changes, discard them, reload the app, or remove it.`})]})]})]}),`\n`,_jsx(_components.p,{children:`There’s no stop button. Removing the app is the only way to take it offline from here.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-passenger-contract`,children:`The Passenger contract`}),`\n`,_jsxs(_components.p,{children:[`Passenger speaks plain Rack. A `,_jsx(_components.code,{children:`config.ru`}),` in your app directory tells it how to start:`]}),`\n`,_jsx(CodeBlock,{filename:`config.ru`,numberOfLines:`2`,language:`ruby`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`ruby`,children:_jsxs(_components.code,{language:`ruby`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`require_relative`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'app'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`run `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`App`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Rails apps come with `,_jsx(_components.code,{children:`config.ru`}),` already wired up, no edits needed:`]}),`\n`,_jsx(CodeBlock,{filename:`config.ru`,numberOfLines:`3`,language:`ruby`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`ruby`,children:_jsxs(_components.code,{language:`ruby`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Rails default`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`require_relative`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'config/environment'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`run `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Rails`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`application`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Don’t run `,_jsx(_components.code,{children:`rails server`}),`. Don’t run `,_jsx(_components.code,{children:`rackup`}),`. Passenger boots the Rack stack itself.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Booting your own server inside the app, whether that’s WEBrick through a Rack handler or Puma started by hand, stops Passenger claiming the app. Let `,_jsx(_components.code,{children:`config.ru`}),` be the entry point and nothing else.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`work-on-the-app-over-ssh`,children:`Work on the app over SSH`}),`\n`,_jsxs(_components.p,{children:[`Each app gets its own gem environment under `,_jsx(_components.code,{children:`~/rubyvenv/\u003capp-directory>/\u003cversion>/`}),`. Your login shell doesn’t use it by default, which is why a gem can be installed and still be missing at runtime.`]}),`\n`,_jsxs(_components.p,{children:[`The app row prints the exact line to fix that. Copy it from `,_jsx(_components.strong,{children:`Command for entering to virtual environment`}),` and run it before anything else:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`source`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/rubyvenv/myapp/3.2/bin/activate`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/myapp`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bundle`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`After installing gems, hit `,_jsx(_components.strong,{children:`Restart`}),` on the app row so Passenger picks them up.`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-issues`,children:`Common issues`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`The app won't start`,id:`the-app-wont-start`,children:_jsxs(_components.p,{children:[`Passenger couldn’t boot the Rack app. Check `,_jsx(_components.code,{children:`config.ru`}),` exists in the app directory, that your gems are installed, and that the Ruby version on the app row matches what your `,_jsx(_components.code,{children:`Gemfile`}),` asks for. `,_jsx(_components.strong,{children:`Restart`}),` after each change.`]})}),_jsxs(Accordion,{title:_jsxs(_Fragment,{children:[`Gem 'X' not found at runtime, but `,_jsx(_components.code,{children:`bundle list`}),` shows it`]}),id:`gem-x-not-found-at-runtime-but-bundle-list-shows-it`,children:[_jsx(_components.p,{children:`Your shell and the app are reading different gem paths. Activate the app’s environment first, then reinstall:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`source`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/rubyvenv/myapp/3.2/bin/activate`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/myapp`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bundle`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Then `,_jsx(_components.strong,{children:`Restart`}),` the app so it picks the gems up.`]}),_jsxs(_components.p,{children:[`To pin the app to its lockfile, use `,_jsx(_components.code,{children:`bundle config set --local deployment true`}),`. The older `,_jsx(_components.code,{children:`bundle install --deployment`}),` flag was deprecated in Bundler 2.1.`]})]}),_jsxs(Accordion,{title:`Asset precompilation runs out of memory`,id:`asset-precompilation-runs-out-of-memory`,children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`assets:precompile`}),` is the hungriest step in a Rails deploy. Compile locally and copy `,_jsx(_components.code,{children:`public/assets/`}),` up, or cap the JavaScript runtime:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`RAILS_ENV`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`production`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` NODE_OPTIONS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`--max-old-space-size`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`512`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` bundle`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` rake`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` assets:precompile`})]}),`\n`]})})})]}),_jsx(Accordion,{title:`Boot times out`,id:`boot-times-out`,children:_jsx(_components.p,{children:`Passenger’s default start timeout is 90 seconds, and a long chain of Rails initializers can outrun it. Trim what runs at boot first, since that helps every request afterwards. If the app genuinely needs longer, open a ticket and we’ll look at the timeout for you.`})}),_jsxs(Accordion,{title:`Gemfile.lock platform mismatch`,id:`gemfile-lock-platform-mismatch`,children:[_jsx(_components.p,{children:`Bundler complains about a missing platform when installing. Add the linux platform to the lockfile from your dev machine:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bundle`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` lock`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --add-platform`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` x86_64-linux`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Commit the updated `,_jsx(_components.code,{children:`Gemfile.lock`}),` and redeploy.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`recipes`,children:`Recipes`}),`\n`,_jsx(CardGroup,{cols:2,children:_jsx(Card,{title:`Deploy Rails`,icon:`train`,href:`/how-to/virtual-containers/ruby/rails`,children:`Rails app, Bundler, asset precompilation.`})}),`\n`,_jsx(Heading,{level:`2`,id:`need-a-hand`,children:`Need a hand?`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Open a ticket`,icon:`life-ring`,href:`https://members.noxity.io/submitticket.php`,children:_jsx(_components.p,{children:`Best for anything that needs an account check or a config change on our end.`})}),_jsx(Card,{title:`Live chat`,icon:`messages`,href:`https://noxity.io/contact`,children:_jsx(_components.p,{children:`Faster for quick questions during business hours.`})})]}),`\n`,_jsx(`div`,{className:`mint-mt-8`,children:_jsx(Accordion,{title:`Sources`,icon:`book-bookmark`,id:`sources`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/web-hosting/virtual-containers/overview`,children:`Virtual Containers overview`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.cloudlinux.com/cloudlinuxos/lve_manager/#ruby-selector-client-plugin`,children:`CloudLinux Ruby Selector client plugin ↗`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.cloudlinux.com/cloudlinuxos/cloudlinux_os_components/`,children:`CloudLinux OS components: Ruby Selector ↗`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://www.phusionpassenger.com/library/walkthroughs/start/ruby.html`,children:`Phusion Passenger Ruby walkthrough ↗`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://www.phusionpassenger.com/library/config/apache/reference/#passengerstarttimeout`,children:`Phusion Passenger: PassengerStartTimeout ↗`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://bundler.io/man/bundle-install.1.html`,children:`Bundler: bundle install ↗`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://noxity.io/web-hosting`,children:`Noxity web hosting plans ↗`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{},"config":{},"pageMetadata":{"title":"Ruby","description":"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.","icon":"gem","keywords":["ruby","ruby selector","passenger","rails","bundler","rack","setup ruby app","config.ru"],"href":"/web-hosting/virtual-containers/ruby"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Ruby versions","slug":"ruby-versions","depth":2,"children":[]},{"title":"Set up an app","slug":"set-up-an-app","depth":2,"children":[]},{"title":"Manage an app","slug":"manage-an-app","depth":2,"children":[]},{"title":"The Passenger contract","slug":"the-passenger-contract","depth":2,"children":[]},{"title":"Work on the app over SSH","slug":"work-on-the-app-over-ssh","depth":2,"children":[]},{"title":"Common issues","slug":"common-issues","depth":2,"children":[]},{"title":"Recipes","slug":"recipes","depth":2,"children":[]},{"title":"Need a hand?","slug":"need-a-hand","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-mb-3 {\n margin-bottom: 0.75rem\n}\n.mint-mb-8 {\n margin-bottom: 2rem\n}\n.mint-ml-auto {\n margin-left: auto\n}\n.mint-mt-8 {\n margin-top: 2rem\n}\n.mint-flex {\n display: flex\n}\n.mint-inline-flex {\n display: inline-flex\n}\n.mint-h-10 {\n height: 2.5rem\n}\n.mint-h-3\\.5 {\n height: 0.875rem\n}\n.mint-w-10 {\n width: 2.5rem\n}\n.mint-w-3\\.5 {\n width: 0.875rem\n}\n.mint-flex-col {\n flex-direction: column\n}\n.mint-flex-wrap {\n flex-wrap: wrap\n}\n.mint-items-center {\n align-items: center\n}\n.mint-justify-center {\n justify-content: center\n}\n.mint-gap-1\\.5 {\n gap: 0.375rem\n}\n.mint-gap-3 {\n gap: 0.75rem\n}\n.mint-gap-x-5 {\n column-gap: 1.25rem\n}\n.mint-gap-y-3 {\n row-gap: 0.75rem\n}\n.mint-rounded-full {\n border-radius: 9999px\n}\n.mint-border {\n border-width: 1px\n}\n.mint-border-b {\n border-bottom-width: 1px\n}\n.mint-border-current {\n border-color: currentColor\n}\n.mint-border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1))\n}\n.mint-bg-emerald-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1))\n}\n.mint-object-cover {\n object-fit: cover\n}\n.mint-px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem\n}\n.mint-py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem\n}\n.mint-pb-6 {\n padding-bottom: 1.5rem\n}\n.mint-text-\\[11px\\] {\n font-size: 11px\n}\n.mint-text-\\[9px\\] {\n font-size: 9px\n}\n.mint-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem\n}\n.mint-font-bold {\n font-weight: 700\n}\n.mint-font-semibold {\n font-weight: 600\n}\n.mint-uppercase {\n text-transform: uppercase\n}\n.mint-leading-none {\n line-height: 1\n}\n.mint-leading-tight {\n line-height: 1.25\n}\n.mint-tracking-wide {\n letter-spacing: 0.025em\n}\n.mint-text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1))\n}\n.mint-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1))\n}\n.mint-text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-border-gray-800:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(31 41 55 / var(--tw-border-opacity, 1))\n}\n.dark\\:mint-bg-emerald-900:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(6 78 59 / var(--tw-bg-opacity, 1))\n}\n.dark\\:mint-text-emerald-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(110 231 183 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-text-gray-100:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(243 244 246 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-text-gray-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1))\n}","subdomain":"noxity","siteName":"Noxity Knowledgebase","title":"Ruby - Noxity Knowledgebase","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-09T16:31:43.523Z","originalFileLocation":"web-hosting/virtual-containers/ruby.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Noxity Knowledgebase\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Ruby - Noxity Knowledgebase\">\u003cmeta data-mint-head property=\"og:description\" content=\"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Noxity Knowledgebase\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.noxity.io/web-hosting/virtual-containers/ruby\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://noxity.mintlify.app/_mintlify/api/og/v2?division=Virtual+Containers\u0026amp;title=Ruby\u0026amp;description=Set+up+a+Ruby+app+in+cPanel+with+the+Ruby+Selector.+Pick+a+Ruby+version+per+app%2C+point+it+at+a+directory+and+a+URL.\u0026amp;theme=d51555184c0af4aba17159e6\u0026amp;signature=1264b0f51c3ff35c50f202aae3b4a1e9e2fc8bc7835d16708d181b6754b923c7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Ruby - Noxity Knowledgebase\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://noxity.mintlify.app/_mintlify/api/og/v2?division=Virtual+Containers\u0026amp;title=Ruby\u0026amp;description=Set+up+a+Ruby+app+in+cPanel+with+the+Ruby+Selector.+Pick+a+Ruby+version+per+app%2C+point+it+at+a+directory+and+a+URL.\u0026amp;theme=d51555184c0af4aba17159e6\u0026amp;signature=1264b0f51c3ff35c50f202aae3b4a1e9e2fc8bc7835d16708d181b6754b923c7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/noxity/LKaJSIbrz-d1OdkS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Noxity Knowledgebase\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#B83553\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.noxity.io/web-hosting/virtual-containers/ruby\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/web-hosting/virtual-containers/ruby.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.noxity.io/#organization\",\"name\":\"Noxity Knowledgebase\",\"url\":\"https://help.noxity.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/noxity/AKndteo9-AwoOj4e/logo/dark.png?fit=max\u0026auto=format\u0026n=AKndteo9-AwoOj4e\u0026q=85\u0026s=76f2b0618a4cdbd4376d51ddab0477f0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.noxity.io#website\",\"name\":\"Noxity Knowledgebase\",\"url\":\"https://help.noxity.io\",\"publisher\":{\"@id\":\"https://help.noxity.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby#webpage\",\"url\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby\",\"name\":\"Ruby\",\"description\":\"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.\",\"dateModified\":\"2026-08-09T16:31:43.523Z\",\"isPartOf\":{\"@id\":\"https://help.noxity.io#website\"},\"breadcrumb\":{\"@id\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Virtual Containers\",\"item\":\"https://help.noxity.io/web-hosting/virtual-containers/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby\",\"item\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby#article\",\"headline\":\"Ruby\",\"name\":\"Ruby\",\"description\":\"Set up a Ruby app in cPanel with the Ruby Selector. Pick a Ruby version per app, point it at a directory and a URL.\",\"url\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby\",\"mainEntityOfPage\":{\"@id\":\"https://help.noxity.io/web-hosting/virtual-containers/ruby#webpage\"},\"dateModified\":\"2026-08-09T16:31:43.523Z\",\"keywords\":\"ruby, ruby selector, passenger, rails, bundler, rack, setup ruby app, config.ru\",\"publisher\":{\"@id\":\"https://help.noxity.io/#organization\"},\"isPartOf\":{\"@id\":\"https://help.noxity.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Noxity Knowledgebase\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Noxity Knowledgebase","nav":{"global":{"anchors":[{"anchor":"Website","icon":"browser","href":"https://noxity.io"},{"anchor":"Community","icon":"discord","href":"https://discord.noxity.io"},{"anchor":"Linktree","icon":"bullseye-pointer","href":"https://tree.noxity.io"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@noxityio"}]},"products":[{"product":"Getting Started","icon":"rocket-launch","pages":[{"title":"Getting Started","href":"/welcome"}]},{"product":"Documentation","icon":"file-lines","dropdowns":[{"dropdown":"English","icon":"flag","tabs":[{"tab":"Web Hosting","icon":"globe","groups":[{"group":"cPanel Control Panels","pages":[{"title":"cPanel","icon":"cpanel","href":"/web-hosting/overview"},{"group":"File Management","icon":"cabinet-filing","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"cabinet-filing","href":"/web-hosting/cpanel/file-management/overview"},{"title":"File Manager","icon":"folder-tree","href":"/web-hosting/cpanel/file-management/file-manager"},{"title":"Images","icon":"image","href":"/web-hosting/cpanel/file-management/images"},{"title":"Directory Privacy","icon":"lock","href":"/web-hosting/cpanel/file-management/directory-privacy"},{"title":"Disk Usage","icon":"hard-drive","href":"/web-hosting/cpanel/file-management/disk-usage"},{"title":"Web Disk","icon":"cloud","href":"/web-hosting/cpanel/file-management/web-disk"},{"title":"Git Version Control","icon":"code-branch","href":"/web-hosting/cpanel/file-management/git-version-control"},{"title":"JetBackup","icon":"dragon","href":"/web-hosting/cpanel/file-management/jetbackup"}]},{"group":"Email Management","icon":"envelopes","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"envelopes","href":"/web-hosting/cpanel/email-management/overview"},{"title":"Email Accounts","icon":"at","href":"/web-hosting/cpanel/email-management/email-accounts"},{"title":"Forwarders","icon":"share-from-square","href":"/web-hosting/cpanel/email-management/forwarders"},{"title":"Email Routing","icon":"route","href":"/web-hosting/cpanel/email-management/email-routing"},{"title":"Autoresponders","icon":"reply","href":"/web-hosting/cpanel/email-management/autoresponders"},{"title":"Default Address","icon":"at","href":"/web-hosting/cpanel/email-management/default-address"},{"title":"Mailing Lists","icon":"list","href":"/web-hosting/cpanel/email-management/mailing-lists"},{"title":"Track Delivery","icon":"magnifying-glass-chart","href":"/web-hosting/cpanel/email-management/track-delivery"},{"title":"Global Email Filters","icon":"filter-circle-xmark","href":"/web-hosting/cpanel/email-management/global-email-filters"},{"title":"Email Filters","icon":"filter","href":"/web-hosting/cpanel/email-management/email-filters"},{"title":"Email Deliverability","icon":"circle-check","href":"/web-hosting/cpanel/email-management/email-deliverability"},{"title":"Address Importer","icon":"file-import","href":"/web-hosting/cpanel/email-management/address-importer"},{"title":"Spam Filters","icon":"ban","href":"/web-hosting/cpanel/email-management/spam-filters"},{"title":"Encryption","icon":"key","href":"/web-hosting/cpanel/email-management/encryption"},{"title":"BoxTrapper","icon":"shield-halved","href":"/web-hosting/cpanel/email-management/boxtrapper"},{"title":"Calendars and Contacts","icon":"calendar-days","href":"/web-hosting/cpanel/email-management/calendars-and-contacts"},{"title":"Email Disk Usage","icon":"chart-pie","href":"/web-hosting/cpanel/email-management/email-disk-usage"},{"title":"Mail Clients","icon":"mailbox","href":"/web-hosting/cpanel/email-management/mail-clients"}]},{"group":"Database Management","icon":"database","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"database","href":"/web-hosting/cpanel/database-management/overview"},{"title":"Manage My Databases","icon":"database","href":"/web-hosting/cpanel/database-management/manage-databases"},{"title":"Database Wizard","icon":"hat-wizard","href":"/web-hosting/cpanel/database-management/database-wizard"},{"title":"Remote Database Access","icon":"network-wired","href":"/web-hosting/cpanel/database-management/remote-database-access"},{"group":"phpMyAdmin","icon":"user-helmet-safety","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"user-helmet-safety","href":"/web-hosting/cpanel/database-management/phpmyadmin/overview"},{"title":"Browse Tables and Data","icon":"table","href":"/web-hosting/cpanel/database-management/phpmyadmin/browse"},{"title":"Run SQL Queries","icon":"terminal","href":"/web-hosting/cpanel/database-management/phpmyadmin/sql"},{"title":"Table Operations","icon":"screwdriver-wrench","href":"/web-hosting/cpanel/database-management/phpmyadmin/table-operations"},{"title":"Import a Database","icon":"file-import","href":"/web-hosting/cpanel/database-management/phpmyadmin/import"},{"title":"Export a Database","icon":"file-export","href":"/web-hosting/cpanel/database-management/phpmyadmin/export"}]}]},{"group":"Domain Management","icon":"galaxy","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"galaxy","href":"/web-hosting/cpanel/domain-management/overview"},{"title":"Domains","icon":"diagram-subtask","href":"/web-hosting/cpanel/domain-management/domains"},{"title":"Redirects","icon":"share-from-square","href":"/web-hosting/cpanel/domain-management/redirects"},{"title":"Zone Editor","icon":"spider-web","href":"/web-hosting/cpanel/domain-management/zone-editor"},{"title":"Dynamic DNS","icon":"arrows-rotate","href":"/web-hosting/cpanel/domain-management/dynamic-dns"},{"group":"WordPress Management","icon":"wordpress","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"wordpress","href":"/web-hosting/cpanel/domain-management/wordpress-management/overview"},{"title":"Installations","icon":"list","href":"/web-hosting/cpanel/domain-management/wordpress-management/installations"},{"title":"Site management","icon":"screwdriver-wrench","href":"/web-hosting/cpanel/domain-management/wordpress-management/site-management"},{"title":"Plugins","icon":"plug","href":"/web-hosting/cpanel/domain-management/wordpress-management/plugins"},{"title":"Themes","icon":"palette","href":"/web-hosting/cpanel/domain-management/wordpress-management/themes"}]}]},{"group":"Metrics \u0026 Analytics","icon":"chart-mixed","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"chart-mixed","href":"/web-hosting/cpanel/metrics-analytics/overview"},{"title":"Visitors","icon":"user","href":"/web-hosting/cpanel/metrics-analytics/visitors"},{"title":"Errors","icon":"circle-exclamation","href":"/web-hosting/cpanel/metrics-analytics/errors"},{"title":"Bandwidth","icon":"gauge","href":"/web-hosting/cpanel/metrics-analytics/bandwidth"},{"title":"Raw Access","icon":"file-zipper","href":"/web-hosting/cpanel/metrics-analytics/raw-access"},{"title":"Awstats","icon":"wave-pulse","href":"/web-hosting/cpanel/metrics-analytics/awstats"},{"title":"Analog Stats","icon":"chart-line","href":"/web-hosting/cpanel/metrics-analytics/analog-stats"},{"title":"Webalizer","icon":"chart-waterfall","href":"/web-hosting/cpanel/metrics-analytics/webalizer"},{"title":"Webalizer FTP","icon":"folder-tree","href":"/web-hosting/cpanel/metrics-analytics/webalizer-ftp"},{"title":"Metrics Editor","icon":"sliders","href":"/web-hosting/cpanel/metrics-analytics/metrics-editor"},{"title":"Resource Usage","icon":"gauge-high","href":"/web-hosting/cpanel/metrics-analytics/resource-usage"}]},{"group":"Security Settings","icon":"tower-observation","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"tower-observation","href":"/web-hosting/cpanel/security-settings/overview"},{"title":"SSH Access","icon":"terminal","href":"/web-hosting/cpanel/security-settings/ssh-access"},{"title":"IP Blocker","icon":"ban","href":"/web-hosting/cpanel/security-settings/ip-blocker"},{"title":"Manage API Tokens","icon":"key","href":"/web-hosting/cpanel/security-settings/manage-api-tokens"},{"title":"Hotlink Protection","icon":"link-slash","href":"/web-hosting/cpanel/security-settings/hotlink-protection"},{"title":"Leech Protection","icon":"user-lock","href":"/web-hosting/cpanel/security-settings/leech-protection"},{"title":"ModSecurity","icon":"shield-halved","href":"/web-hosting/cpanel/security-settings/modsecurity"},{"group":"SSL/TLS Certificates","icon":"file-certificate","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"file-certificate","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/overview"},{"title":"Wizard","icon":"wand-magic-sparkles","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/wizard"},{"title":"Status","icon":"signal-bars","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/status"},{"title":"Certificates","icon":"file-certificate","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/certificates"},{"title":"Keys","icon":"key","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/keys"},{"title":"Requests","icon":"signature","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/requests"},{"title":"Installation","icon":"plug","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/installation"},{"title":"Settings","icon":"sliders","href":"/web-hosting/cpanel/security-settings/ssl-tls-certificates/settings"}]},{"group":"Imunify360","icon":"shield-virus","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"shield-virus","href":"/web-hosting/cpanel/security-settings/imunify360/overview"}]}]},{"group":"Software","icon":"computer","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"code","href":"/web-hosting/cpanel/software/overview"},{"title":"PHP PEAR Packages","icon":"cubes-stacked","href":"/web-hosting/cpanel/software/pear-packages"},{"title":"Perl Modules","icon":"gem","href":"/web-hosting/cpanel/software/perl-modules"},{"title":"Optimize Website","icon":"gauge","href":"/web-hosting/cpanel/software/optimize-website"},{"group":"Select PHP Version","icon":"php","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"php","href":"/web-hosting/cpanel/software/select-php-version/overview"},{"title":"Extensions","icon":"puzzle-piece","href":"/web-hosting/cpanel/software/select-php-version/extensions"},{"title":"Options","icon":"sliders","href":"/web-hosting/cpanel/software/select-php-version/options"}]},{"group":"AccelerateWP","icon":"bolt","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"bolt","href":"/web-hosting/cpanel/software/accelerate-wp/overview"},{"title":"Caching","icon":"database","href":"/web-hosting/cpanel/software/accelerate-wp/caching"},{"title":"File optimization","icon":"scissors","href":"/web-hosting/cpanel/software/accelerate-wp/file-optimization"},{"title":"Media optimization","icon":"image","href":"/web-hosting/cpanel/software/accelerate-wp/media-optimization"},{"title":"Database and Heartbeat","icon":"broom-wide","href":"/web-hosting/cpanel/software/accelerate-wp/database-and-heartbeat"}]},{"title":"X-Ray App","icon":"magnifying-glass-chart","href":"/web-hosting/cpanel/software/php-xray"},{"group":"Softaculous","icon":"browser","pages":[{"title":"Karkoli","href":"/web-hosting/cpanel/software/softaculous/softaculous-example"}]},{"group":"Website Builder","icon":"forklift","pages":[{"title":"Karkoli","href":"/web-hosting/cpanel/software/website-builder/website-builder-example"}]}]},{"group":"Advanced","icon":"gears","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"gears","href":"/web-hosting/cpanel/advanced/overview"},{"title":"LiteSpeed Redis Cache Manager","icon":"database","href":"/web-hosting/cpanel/advanced/litespeed-redis-cache-manager"},{"title":"LiteSpeed Web Cache Manager","icon":"bolt","href":"/web-hosting/cpanel/advanced/litespeed-web-cache-manager"},{"title":"Cron Jobs","icon":"calendar-clock","href":"/web-hosting/cpanel/advanced/cron-jobs"},{"title":"Terminal","icon":"terminal","href":"/web-hosting/cpanel/advanced/terminal"},{"title":"Track DNS","icon":"compass","href":"/web-hosting/cpanel/advanced/track-dns"},{"title":"Indexes","icon":"list-tree","href":"/web-hosting/cpanel/advanced/indexes"},{"title":"Error Pages","icon":"triangle-exclamation","href":"/web-hosting/cpanel/advanced/error-pages"},{"title":"Apache Handlers","icon":"feather","href":"/web-hosting/cpanel/advanced/apache-handlers"},{"title":"MIME Types","icon":"file-code","href":"/web-hosting/cpanel/advanced/mime-types"},{"title":"Virus Scanner","icon":"shield-virus","href":"/web-hosting/cpanel/advanced/virus-scanner"}]}]},{"group":"Virtual Containers","icon":"container-storage","pages":[{"title":"Virtual Containers","icon":"container-storage","href":"/web-hosting/virtual-containers/overview"},{"title":"Node.js","icon":"node","href":"/web-hosting/virtual-containers/nodejs"},{"title":"Python","description":"Set up a Python app in cPanel with Setup Python App. Pick an interpreter, point Passenger at your WSGI callable, and install packages with Run Pip Install.","icon":"python","href":"/web-hosting/virtual-containers/python"},{"title":"Ruby","icon":"gem","href":"/web-hosting/virtual-containers/ruby"}]}]},{"tab":"Domains","icon":"plane-up","pages":[{"title":"Domains","href":"/domains/overview"}]},{"tab":"Members Area","icon":"user-astronaut","pages":[{"title":"Members Area","href":"/members/members"}]}]},{"dropdown":"Slovenščina","icon":"flag","pages":[{"title":"Dobrodošli","icon":"meteor","href":"/sl/welcome"}]}]},{"product":"Knowledge Base","icon":"book-open-cover","pages":[{"title":"Knowledge Base","href":"/how-to/how-to-example"}]}]},"basePath":"","title":"Ruby - Noxity Knowledgebase","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["a74be98ba7","07c022d89b"],"chunks":["zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js","Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js"]}