- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我目前在 osx lion 下使用 rvm 和 unicorn 进行服务器管理。我也使用 gemset。
因此,为了启动我的服务器,我执行以下操作:
cd /xyz/project
unicorn -c /xyz/project/config/unicorn.rb -E production
现在我希望此服务器在我的计算机启动时启动。我阅读了一些关于将 plist 文件添加到 ~/Library/LaunchAgents/
并使用 launchctl
激活它的内容,但我不知道在这个 plist 文件中写什么来启动我的服务器.
有什么想法吗?我也认为这很困难,因为需要通过 cd 进入此目录来激活 gemset。
感谢所有帮助。
最佳答案
您可能希望将其作为 LaunchDaemon 而不是 LaunchAgent 来运行。守护进程在系统上下文中运行,因此可以在任何人登录之前在系统启动时运行。代理在登录 session 中运行,因此直到用户登录后才启动(并且以用户身份运行而不是以根用户身份运行,如果两个用户通过快速切换立即登录,他们将为每个用户运行一个副本,并且......)。 .plist 文件本身对于守护进程和代理来说几乎是一样的,区别在于你是把它放在/Library/LaunchDaemons 还是/Library/LaunchAgents。
文件本身取决于一些事情。我假设它需要在系统启动时启动。它是否 self 守护(即进入后台)? launchd 不喜欢它启动的程序自行守护进程,因为它希望能够监视它们,并可能在它们崩溃/退出时重新启动它们。如果 unicorn 可以选择不进行守护进程,请使用它;如果不是,则需要稍微更改 .plist 文件以适应它。首先,这是一个基本的启动时运行的 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>
EDIT3:我不太熟悉 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 和 source
可能会更好启动 unicorn 之前所有必要的设置文件。您可以使用 shell 脚本来执行此操作,或者仅通过将必要的命令序列作为 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 上启动 unicorn ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704747/
每当我运行命令以将 Virtualbox 驱动程序启动 Minishift 到操作系统主机时,它都需要一段疯狂的时间,而且它永远不会结束。有时我什至收到有关达到存储限制的错误消息。 不知道是不是描述h
您好,我正在使用 npm 运行一个基本的 React 项目,我正尝试在 docker 容器中启动它。但是我实际上无法让项目运行。我的 dockerfile 看起来像这样: FROM node:7.8.
所以我想从我的 SSH 终端开始游戏。 这真的很奇怪,当我直接从 Linux GUI 执行此操作时,它可以工作。但是当我使用 SSH 客户端进行远程连接时,它就崩溃了。似乎与我的显示驱动程序有关。 U
我有一个显示图像的动态壁纸。我在 Activity 中更改了该图像。然后我需要通知动态壁纸,以便它知道重新加载资源。 Intent 似乎是完美、简单的解决方案: Intent intent = new
我有一个似乎无法解决的问题。我在 Boot Dashboard 中使用 STS 3.9.2 从 Eclipse (Oxygen) 启动 Spring Boot 应用程序没有任何问题: 但是,当我尝试从
全新的 Python,在我开始摆弄东西之前先设置和安装东西。我的理解是 Python 2.7 和 Python 3.3 之间存在一些显着差异/不兼容,尽管这两个版本都得到了很好的使用,所以我认为最好安
在使用了很长时间的 jQuery 之后,我有一个问题,我正在使用 jQuery 模式(样式)编写一个简单的代码, (function(window, undefined) { var jQu
我正在尝试在 spring boot 应用程序下的非 spring 托管类中配置 Autowired。我在 tomcat 服务器下部署的 Web 应用程序下成功运行了这个。但是当我想在 spring
我对 xmonad 完全陌生,但我想开始使用它来提高我的工作效率。 这是我一直在使用的指南(我使用的是 Apple OS X Snow Leopard) http://xmonad.org/tour.
我试图将Spring Boot指南中的Managing Transactions示例扩展到两个数据源,但是@Transaction注释似乎仅对其中一个数据源有效。 在“Application.java
conEmu 有没有办法默认打开多个不同的选项卡? 我看到这个页面解释了如何使用 splits , 我意识到我可以按 Ctrl + T, 1, Enter,但我希望有一种方法可以自动执行此操作! "%
我正在寻找快速而肮脏的答案。我当时脑子一片空白,盯着屏幕看了 12 个小时以上,我想我中枪了。 我想做一个简单的 SignalR 应用程序作为教程。我找到了这个example ,但我不断收到票证未定义
我正在使用 Azure Powershell cmdlet 来启动/停止 VM。 Start-AzureVM [-ServiceName] [-Name] [ ] Stop-AzureVM [-S
我想使用Powershell脚本代码启动/停止iis和mssql 意味着当我运行ps脚本时,我想启动/停止iis和mssql 我在网上搜索了它,发现了一些代码,但按照我的要求无法正常工作 码: $ii
我在 liferay 工作。我们在我们的项目中使用一个模块来创建 liferay 主题。我使用命令 ant -Ddeploy.war=true 将它部署在服务器中。 war 文件在 liferay 部
我想在已安装 Python 2.7 的 Windows XP 计算机上运行 IPython(版本 0.12)。 我通过 Windows 二进制安装程序安装,但安装后 IPython 没有显示在菜单中,
我从创建了自己的简单图片。 FROM python:2.7.11 RUN mkdir /extra/later/ \ && mkdir /yyy 现在,我可以执行以下步骤: docker run
$(document).ready(function () { setTimeout(function() { window.location.reload(); }, 2000); // 2
我刚刚创建了一个帐户 OpenWeatherMap 我想通过城市 ID API 调用获取当前位置的天气: http://api.openweathermap.org/data/2.5/weather?
我注意到,如果我更改 xcasset 中的图像,启动 Storyboard不会更新。 例如,假设您的启动 Storyboard中有一个 UIImage View ,其中包含一个名为“logo”的蓝色图
我是一名优秀的程序员,十分优秀!