在 Linux 系统上,将生产 Rails 应用程序部署到哪个合理且合乎逻辑的目录?
一些候选人……
/var/rails <= There's a /var/www so this would be consistent with that
pattern. But I.T. guys have complained about stuff in /var
before.
/home/my_home_dir/rails <= OK, not /var, but I'm not the only developer.
Seems like it really ought to be a systemwide
location.
/home/rails <= I don't know. That just seems weird.
/rails <= Seems even weirder.
在这里最不令人惊讶、最正常的事情是什么?
(背景信息 - Rails 应用程序是一堆用 Ruby 编写的服务器端代码以及public
包含 JavaScript、CSS 和一些 HTML 的目录。该public
目录映射到 Apache vhost。Apache 通过名为 Passenger 或 的模块处理 Ruby 代码mod_rails
。)
谢谢大家的帮助。我想我会选择/opt/deployed_rails_apps
。(我喜欢较长的说明性目录名称和制表符补全。)/var/...
也是一个不错的地方,但是当我尝试在那里部署东西时,IT 部门严厉地抱怨。如果这是我自己的机器,我可能会选择/var
或/srv
。
答案1
我认为/选择将会是一个应用像这样。我同意遵循 chmeee 建议的 FHS,但我不同意 Rails 应用程序本身是一种服务。
答案2
您可能希望关注文件系统层次标准 (FHS)并将其放入
/srv : Data for services provided by this system
编辑:
我不会把它放在/opt
:
/opt : Add-on application software packages
其目的是这样的:
/opt 保留用于安装附加应用软件包。
安装在 /opt 中的包必须将其静态文件放置在单独的 /opt/ 或 /opt/ 目录树中,其中 是描述软件包的名称,是提供商的 LANANA 注册名称。
我不认为开发的应用程序是一个“软件包”。
理由/srv
是
指定此项的主要目的是为了让用户可以找到特定服务的数据文件的位置,并且能够合理地放置需要用于只读数据、可写数据和脚本(例如 cgi 脚本)的单一树的服务。
我理解 rails 应用程序是一个 cgi 脚本,应该放在/srv
.
答案3
在 CentOS Linux 发行版(以及随后的 RedHat)上,当您安装 httpd 包(适用于 Apache 2)时,它会创建/var/www
,并期望您的虚拟主机指向此处的 Web 内容。默认虚拟主机通常转储在 中/var/www/htdocs
,后续站点/应用程序应放入 中/var/www/sitename
。
实际位置应该不太重要,但通常可以看到/opt/www/sitename
、/var/www/sitename
,或者简单地/opt/www
或/var/www
。
/home
您已经说明了为什么其他一些地点(例如)不太适合这样做的原因。
就我个人而言,我更喜欢它,/var/www/sitename
因为它对 Apache 和 Rails 很友好,并且是系统范围的。
答案4
在基于 debian/ubuntu 的系统中,此类应用程序通常安装在 /usr/share 文件夹(即 /usr/share/ruby)中,因为它们是非编译文件(将进入 /usr/lib)。由于您的应用程序不是标准应用程序,您可能会将其放在 /usr/local/share 中,以防止它被任何系统更新覆盖。
/opt 在这里当然也是一种可能性。