This is a template for building a Shopify app using Ruby on Rails and React. It contains the basics for building a Shopify app.
Rather than cloning this repo, you can use your preferred package manager and the Shopify CLI with these steps.
Shopify apps are built on a variety of Shopify tools to create a great merchant experience. The create an app tutorial in our developer documentation will guide you through creating a Shopify app using this template.
The Ruby app template comes with the following out-of-the-box functionality:
These third party tools are complemented by Shopify specific tools to ease app development:
Tool | Usage |
---|---|
Shopify App | Rails engine to help build Shopify app using Rails conventions. Helps to install your application on shops, and provides tools for: |
ShopifyAPI Gem | A lightweight gem to provide tools for: ShopifyApp uses this behind the scenes to handle OAuth) |
App Bridge, App Bridge React |
Frontend library that: |
Polaris React | A powerful design system and react component library that helps developers build high quality, consistent experiences for Shopify merchants. |
File-based routing | Tool makes creating new pages easier. |
@shopify/i18next-shopify |
A plugin for i18next that allows translation files to follow the same JSON schema used by Shopify app extensions and themes. |
This template combines a number of third party open source tools:
i18next
and related libraries are used to internationalize the frontend.
react-i18next
is used for React-specific i18n functionality.i18next-resources-to-backend
is used to dynamically load app translations.@formatjs/intl-localematcher
is used to match the user locale with supported app locales.@formatjs/intl-locale
is used as a polyfill for Intl.Locale
if necessary.@formatjs/intl-pluralrules
is used as a polyfill for Intl.PluralRules
if necessary.[!NOTE] If you'd prefer not to use React, you can replace it with a Stimulus frontend.
This template runs on Shopify CLI 3.0. You can start a new project with this template by running this command:
shopify app init --template=https://github.com/Shopify/shopify-app-template-ruby
Once the Shopify CLI clones the repo, you will be able to run commands on your app. However, the CLI will not manage your Ruby dependencies automatically, so you will need to go through some steps to be able to run your app. To make the process easier, the template provides a script to run the necessary steps:
Start off by switching to the web
folder:
cd web
Install the ruby dependencies:
bundle install
Run the Rails template script. It will guide you through setting up your database and set up the necessary keys for encrypted credentials.
bin/rails app:template LOCATION=./template.rb
And your Rails app is ready to run! You can now switch back to your app's root folder to continue:
cd ..
The Shopify CLI connects to an app in your Partners dashboard. It provides environment variables, runs commands in parallel, and updates application URLs for easier development.
You can develop locally by running the following command from the root of your app:
shopify app dev
Open the URL generated in your console. Once you grant permission to the app, you can start development.
This template uses Rails' ActiveRecord framework to store Shopify session data. It provides migrations to create the necessary tables in your database, and it stores and loads session data from them.
The database that works best for you depends on the data your app needs and how it is queried. You can run your database of choice on a server yourself or host it with a SaaS company. Once you decide which database to use, you can configure your app to connect to it, and this template will start using that database for session storage.
The frontend is a single page React app.
It requires the SHOPIFY_API_KEY
environment variable, which you can get by running shopify app info --web-env
.
The CLI will set up the necessary environment variables for the build if you run its build
command from your app's root:
In your app's root folder:
shopify app build --client-id=REPLACE_ME
The app build command will build both the frontend and backend when running as above.
If you're manually building (for instance when deploying the web
folder to production), you'll need to build both of them:
cd web/frontend
SHOPIFY_API_KEY=REPLACE_ME shopify app build
cd ..
rake build:all
You can use the ShopifyAPI gem to start make authenticated Shopify API calls.
Examples from this app template:
ProductCreator#create
(web/app/services/product_creator.rb)ProductsController#count
(web/app/controllers/products_controller.rb)When you're ready to set up your app in production, you can follow our deployment documentation to host your app on a cloud provider like Heroku or Fly.io.
When you reach the step for setting up environment variables, you also need to set the following variables:
Variable | Secret? | Required | Value | Description |
---|---|---|---|---|
RAILS_MASTER_KEY |
Yes | Yes | string | Use value from web/config/master.key or create a new one. |
RAILS_ENV |
Yes | "production" |
||
RAILS_SERVE_STATIC_FILES |
Yes | 1 |
Tells rails to serve the React app from the public folder. | |
RAILS_LOG_TO_STDOUT |
1 |
Tells rails to print out logs. |
When running the app with the CLI in development mode on Firefox, you might see your app constantly reloading when you access it. That happened in previous versions of the CLI, because of the way HMR websocket requests work.
We fixed this issue with v3.4.0 of the CLI, so after updating it, you can make the following changes to your app's web/frontend/vite.config.js
file:
Change the definition hmrConfig
object to be:
const host = process.env.HOST
? process.env.HOST.replace(/https?:\/\//, "")
: "localhost";
let hmrConfig;
if (host === "localhost") {
hmrConfig = {
protocol: "ws",
host: "localhost",
port: 64999,
clientPort: 64999,
};
} else {
hmrConfig = {
protocol: "wss",
host: host,
port: process.env.FRONTEND_PORT,
clientPort: 443,
};
}
Change the server.host
setting in the configs to "localhost"
:
server: {
host: "localhost",
...
shopify.app.toml
is present and contains up to date information for the app's redirect URLS. To reset/update this config, runshopify app dev --reset
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。