1

我最近开始使用 Rails 7 alpha2,并尝试将新的 gems cssbundling-railsyarn build:css --watch和jsbundling -rails的观察者集成yarn build --watch到 systemd 服务中。我通常使用 systemd 来控制我的 Rails 应用程序的所有相关服务(Puma、Postgres、Redis...),因此将这些观察程序也添加到此设置中会非常方便。

使用下面给出的服务文件,它对于cssbundling-rails工作得非常好,但不知何故 jsbundling-rails 的观察程序立即以退出代码 0 终止。似乎 esbuild 没有进入观察模式。所以,我认为这是 esbuild 的问题。

CSS 服务文件:

[Unit]
Description=Rails CSS Watcher
PartOf=rails_app.service
After=rails_app.service rails_app_webserver.service
Requires=rails_app_webserver.service

[Service]
Type=simple
User=rails_user
Restart=on-failure
WorkingDirectory=/home/rails_user/rails_app/
ExecStart=/usr/local/bin/yarn --verbose build:css --watch

[Install]
WantedBy=rails_app.service

CSS服务状态:

rails_app_css_watcher.service - Rails CSS Watcher
  Loaded: loaded (/etc/systemd/system/rails_app_css_watcher.service; enabled; vendor preset: enabled)
  Active: active (running) since Fri 2021-10-29 09:53:37 CEST; 9s ago
Main PID: 17552 (node)
   Tasks: 23 (limit: 38018)
  Memory: 104.8M
  CGroup: /system.slice/rails_app_css_watcher.service
          ├─17552 node /usr/local/bin/yarn build:css --watch
          ├─17666 /bin/sh -c sass ./app/assets/stylesheets/application.bootstrap.scss ./app/assets/builds/application.css --no-source-map --load-path=node_modules --watch
          └─17668 /usr/bin/node /home/rails_user/rails_app/node_modules/.bin/sass ./app/assets/stylesheets/application.bootstrap.scss ./app/assets/builds/application.css --no->

Okt 29 09:53:37 dev systemd[1]: Started Rails CSS Watcher.
Okt 29 09:53:37 dev yarn[17552]: yarn run v1.22.11
Okt 29 09:53:38 dev yarn[17552]: $ sass ./app/assets/stylesheets/application.bootstrap.scss ./app/assets/builds/application.css --no-source-map --load-path=node_modules --watch
Okt 29 09:53:38 dev yarn[17668]: Sass is watching for changes. Press Ctrl-C to stop.

JS服务文件:

[Unit]
Description=Rails JS Watcher
PartOf=rails_app.service
After=rails_app.service rails_app_webserver.service
Requires=rails_app_webserver.service

[Service]
Type=simple
User=rails_user
Restart=on-failure
WorkingDirectory=/home/rails_user/rails_app/
ExecStart=/usr/local/bin/yarn --verbose build --watch

[Install]
WantedBy=rails_app.service

JS服务状态:

rails_app_css_watcher.service - Rails JS Watcher
  Loaded: loaded (/etc/systemd/system/rails_app_css_watcher.service; enabled; vendor preset: enabled)
  Active: inactive (dead) since Fri 2021-10-29 10:16:17 CEST; 8s ago
 Process: 18729 ExecStart=/usr/local/bin/yarn --verbose build --watch (code=exited, status=0/SUCCESS)
Main PID: 18729 (code=exited, status=0/SUCCESS)

Okt 29 10:16:17 dev yarn[18729]: verbose 0.147715144 Checking for configuration file "/home/rails_user/rails_app/.yarnrc".
Okt 29 10:16:17 dev yarn[18729]: verbose 0.147930862 Checking for configuration file "/home/rails_user/.yarnrc".
Okt 29 10:16:17 dev yarn[18729]: verbose 0.148159418 Checking for configuration file "/home/rails_user/.yarnrc".
Okt 29 10:16:17 dev yarn[18729]: verbose 0.148414149 Found configuration file "/home/rails_user/.yarnrc".
Okt 29 10:16:17 dev yarn[18729]: verbose 0.14857181 Checking for configuration file "/home/.yarnrc".
Okt 29 10:16:17 dev yarn[18729]: verbose 0.152530605 current time: 2021-10-29T08:16:17.072Z
Okt 29 10:16:17 dev yarn[18729]: $ esbuild app/javascript/*.* --bundle --outdir=app/assets/builds --watch
Okt 29 10:16:17 dev yarn[18729]: Done in 0.07s.
Okt 29 10:16:17 dev systemd[1]: rails_app_css_watcher.service: Succeeded.

Rails 7 引入了一个foreman runner来控制 Puma 和提到的 watchers。由于工头允许导出到 systemd,我也试过这个。生成的 systemd 文件也有同样的问题,但在下面给出以供参考。

工头生成的JS服务文件:

[Unit]
PartOf=rails_app.target
StopWhenUnneeded=yes

[Service]
User=rails_user
WorkingDirectory=/home/rails_user/rails_app
Environment=PORT=5100
Environment=PS=js.1
ExecStart=/bin/bash -lc 'exec -a "rails_app-js.1" yarn build --watch'
Restart=always
RestartSec=14s
StandardInput=null
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=%n
KillMode=mixed
TimeoutStopSec=5
4

0 回答 0