在服务器启动时启动ruby rake任务

时间:2013-04-23 11:30:59

标签: ruby-on-rails rake fedora systemd

我需要在服务器启动时启动一些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并稍后担心它的依赖关系。

3 个答案:

答案 0 :(得分:2)

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

其次,我认为你应该真正看一下foreman gem,因为它设计用于处理这种情况,尽管你可能需要使用systemd来适应它。

一种方法是从systemd init文件调用foreman,传递选项以在应用程序目录中指定Procfile(foreman配置文件)。

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

答案 1 :(得分:2)

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

systemctl daemon-reload

答案 2 :(得分:1)

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

config/initializers/文件夹

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