我最近开始使用 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