【问题标题】:Start ruby rake task on server boot在服务器启动时启动 ruby​​ rake 任务
【发布时间】:2013-04-23 11:30:58
【问题描述】:

我有几个 Rails rake 任务需要在服务器启动时启动。我一直在寻找使用 systemd 让它们作为传统服务运行。该服务文件是在/etc/system/systemd 下创建的,但不幸的是,systemd 似乎没有找到该文件:

#systemctl start screens.service
Failed to issue method call: Unit screens.service failed to load: No such file or directory. See system logs and 'systemctl status screens.service' for details.

#systemctl status screens.service
screens.service
      Loaded: error
      Active: inactive (dead)

我目前正在使用 Fedora 15

如何使我的 systemd 服务正常工作?有没有其他方法可以让我的 rake 任务在系统启动时运行。

更新:screens.service 文件内容

[Unit]
Description=Send Reminders

[Service]
Type=simple
User=myuser
WorkingDirectory=/path/to/rails/app
ExecStart=/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rake reminders:send

我知道当我需要它在启动时工作时我需要设置依赖关系,但目前我正在尝试使用 systemctl 命令启动我的 rake 并担心它的依赖关系。

【问题讨论】:

  • 我们可以看一下screens.service 文件吗?
  • 系统日志中是否有任何关于它未能找到的文件或目录的信息?

标签: ruby-on-rails rake fedora systemd


【解决方案1】:

首先,我不会直接调用 rake,而是调用 /path/to/ruby/bin/bundle exec rake my:raketask。

其次,我认为您应该真正了解一下 foreman gem,因为它旨在处理这种情况,尽管您可能必须使其与 systemd 一起使用。

一种方法是从 systemd 初始化文件调用工头,并传递选项以指定应用目录中的 Procfile(工头配置文件)。

Foreman 已经可以将其配置导出为多种格式,但我认为您的不在其中。但, 您可以创建一个自定义导出器,将工头配置导出为 systemd 格式。请参阅https://github.com/ddollar/foreman/wiki/Custom-exporters 了解更多信息。如果您走这条路,请考虑将您的出口商贡献回工头项目。

【讨论】:

  • 我正在考虑让它与上帝一起工作 (godrb.com) 但无论哪种方式我都必须让 systemd 工作
【解决方案2】:

为了让 systemd 注意到新添加的服务,我必须插入以下命令:

systemctl daemon-reload

【讨论】:

    【解决方案3】:

    通常如果您需要在应用程序初始化程序中启动某些内容,您可以将.rb 文件放入

    config/initializers/文件夹

    您能否详细说明您的要求,因为可能还有其他方法可以做到这一点? :)

    【讨论】:

    • 我需要运行 2 个独立于我的应用程序的后台进程,类似于 delay_jobs rake jobs:work
    • 我需要运行一个方法,该方法可以在服务器启动时从 Vault 服务器获取凭据,并且应该可用于数据库查找和其他进程,就像使用 java @bean 初始化某些东西一样。由于我是 Ruby 新手,因此无法找到实现这一目标的任何方法。任何帮助将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多