Вот версия для проверки производительности с использованием RVM и Systemd. Будет поддерживать сервер, если он будет расторгнут по какой-либо причине.
[Unit]
Description=Puma Control
After=network.target
[Service]
Type=forking
User=user
WorkingDirectory=/var/www/your_project_name
PIDFile=/var/www/your_project_name/shared/tmp/pids/puma.pid
ExecStart=/home/user/.rvm/bin/rvm default do bundle exec puma -C /var/www/your_project_name/shared/puma.rb --daemon
ExecStop=/home/user/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/your_project_name/shared/tmp/pids/puma.state -F /var/www/your_project_name/shared/puma.rb stop
Restart=always
# RestartSec=10
[Install]
WantedBy=default.target
Я думаю, что вы ищете это https://reacttraining.com/react-router/web/example/recursive-paths и https://reacttraining.com/react- router / web / example / no-match (использование компонента <Switch>
на маршрутах верхнего уровня).
Как
<Route path={`${match.url}/product/:id`} component={ProductPage} />
{category.subCategories.map(s => (
<React.Fragment key={s.urlName}>
<Link to={`${match.url}/${s.urlName}`}>{s.name}</Link>
<Route path={`${match.url}/${s.urlName}`} component={CategoryPage} />
</React.Fragment>
))}
И сверху
<Switch>
<Route path="/" exact component={Home} />
<Route path="/profile" component={WillMatch} />
<Route path="/main-category-number-one-if-you-want-or-map-it-list-from-backend" component={CategoryPage} />
<Route component={NoMatch} />
</Switch>
Конечно, вы должны создать urlName подкатегории самостоятельно. Например, сделать его коротким или иметь черный список имен (например, подкатегория с именем product
, которая нарушит логику вашего приложения)
О BreadCrumbs - вы можете заставить их купить парсинг match.url
и поместить его сверху CategoryPage
( только одна категория найдена в URL)