ruby-on-rails – 在OSX Startup上启动独角兽

ruby-on-rails – 在OSX Startup上启动独角兽,第1张

概述我目前正在osx lion下使用rvm和unicorn进行服务器管理. 我也使用gemset. 所以为了启动我的服务器我做以下事情: cd /xyz/projectunicorn -c /xyz/project/config/unicorn.rb -E production 现在我希望这台服务器在我的电脑启动时启动. 我读了一些关于将一个plist文件添加到〜/ Library / Launch 我目前正在osx lion下使用rvm和unicorn进行服务器管理.
我也使用gemset.

所以为了启动我的服务器我做以下事情:

cd /xyz/projectunicorn -c /xyz/project/config/unicorn.rb -E production

现在我希望这台服务器在我的电脑启动时启动.
我读了一些关于将一个pList文件添加到〜/ library / LaunchAgents /并使用launchctl激活它的内容但我不知道在这个pList文件中写什么来启动我的服务器.

有任何想法吗?我认为这很困难,因为宝石需要通过cd进入这个目录来激活.

谢谢你的帮助.

解决方法 您可能希望将其作为launchdaemon运行,而不是LaunchAgent.守护进程在系统上下文中运行,因此可以在任何人登录之前在系统启动时运行.代理在登录会话中运行,因此在用户登录之前不会启动(并以用户身份运行,而不是以root身份运行,如果有两个用户通过快速切换立即登录,他们将为每个用户运行副本,并且…).守护进程与代理的.pList文件本身几乎相同,区别在于您是将它放在/ library / launchdaemons还是/ library / LaunchAgents中.

文件本身取决于一些事情.我假设它需要在系统启动时启动.它是否会守护自己(即落入后台)? launchd不喜欢它自己启动的程序,因为它希望能够监视它们,并且如果它们崩溃/退出可能会重新启动它们.如果独角兽有选择不守护,那就用它;如果没有,您需要稍微更改.pList文件以适应它.首先,这是一个基本的run-at-startup launchdaemon .pList文件:

<?xml version="1.0" enCoding="UTF-8"?><!DOCTYPE pList PUBliC "-//Apple Computer//DTD PList 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><pList version="1.0"><dict>        <key>Disabled</key>        <false/>        <key>Label</key>        <string>local.unicorn</string>        <key>ProgramArguments</key>        <array>                <string>/full/path/to/unicorn</string>                <string>-c</string>                <string>/xyz/project/config/unicorn.rb</string>                <string>-E</string>                <string>production</string>        </array>        <key>WorkingDirectory</key>        <string>/xyz/project</string>        <key>RunAtLoad</key>        <true/>        <key>EnableTransactions</key>        <false/></dict></pList>

如果unicorn守护自己,你需要添加它(在< / dict>行之前):

<key>KeepAlive</key>        <false/>        <key>AbandonProcessGroup</key>        <true/>

如果它没有守护进程(或者你可以通过更改ProgramArguments让它跳过守护进程),你可以选择添加它:

<key>KeepAlive</key>        <true/>

将文件命名为/library/launchdaemons/local.unicorn.pList(名称应与标签匹配),将所有权设置为root:wheel,权限设置为600.您可以使用sudo launchctl load / library / launchdaemons激活它/local.unicorn.pList,或重启.

编辑:为了排除故障,您可以将以下内容添加到.pList文件中:

<key>StandardOutPath</key>        <string>/tmp/unicorn.out</string>        <key>StandardErrorPath</key>        <string>/tmp/unicorn.err</string>        <key>DeBUG</key>        <true/>

然后卸载(sudo launchctl unload /library/launchdaemons/local.unicorn.pList)并重新加载它,并检查/var/log/system.log,/tmp/unicorn.out和/tmp/unicorn.err以获取有关什么的提示出错了.

EDIT2:以不同的用户身份运行,添加如下内容:

<key>Username</key>        <string>choise</string>

编辑3:我不熟悉rvm以及它如何处理它的配置,但听起来你需要设置一些环境变量来正确设置它.由于您没有进入常规shell中的目录,因此.rvmrc文件永远不会运行.有几种方法可以解决这个问题.

首先,您可以确定需要设置哪些环境变量,并将这些变量添加到.pList文件中,如下所示:

<key>Environmentvariables</key>        <array>                <key>ruby_string</key>                <string>ruby-1.9.2-p136</string>                <key>gemset_name</key>                <string>unicorn</string>        </array>

……但这可能有点脆弱,特别是如果他们改变了;您需要同时更新.rvmrc和.pList文件才能始终如一地工作.

在启动独角兽之前让它实际打开一个shell并获取所有必要的安装文件可能会更好.您可以使用shell脚本执行此 *** 作,或者仅将必要的命令序列作为(单个long)参数包含在shell中.为此,请使用以下内容替换ProgramArguments部分:

<key>ProgramArguments</key>        <array>                <string>/bin/bash</string>                <string>-c</string>                <string>source /etc/rvmrc; source /Users/server/.rvmrc; source .rvmrc; /Users/server/.rvm/gems/ruby-1.9.2-head@q/bin/unicorn -c /Users/server/Sites/Rails/q/config/unicorn.rb -E production</string>        </array>

(但不要输出任何不存在的rvmrc文件.)

总结

以上是内存溢出为你收集整理的ruby-on-rails – 在OSX Startup上启动独角兽全部内容,希望文章能够帮你解决ruby-on-rails – 在OSX Startup上启动独角兽所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1255088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存