我正在寻找一个关于服务器上 Rails 3.1.1 应用程序的良好部署教程。我所说的“好”实际上是指“完整”。我发布这个问题的原因是,尽管网络上有大量教程(谷歌、博客、书籍、其他 stackoverflow 问题等...),但它们似乎都集中在部署过程的问题上或者对部署环境做出一些与我需要不匹配的假设。
我意识到在服务器上部署 Rails 应用程序需要各种不同的程序和工具,这些程序和工具需要配置,并且不知怎的,我总是陷入明显的“小”事情,这让我非常沮丧。
那么,让我们从头开始吧。我现在拥有的是一个可以通过 SSH 访问的服务器和一个域名,我们称之为www.example.com。服务器运行全新的 Ubuntu 10.04 x64,并且只安装了一个用户,即 root(我通过 root 使用 SSH 访问服务器)。
笔记!没有安装 Apache、Ruby、PHP、MySQL、cPanel 或任何其他面板,只是全新安装的最低限度的面板。
此外,Web 服务器将托管单个应用程序,数据库将在同一台计算机上运行。
据我所知,部署 Rails 应用程序的过程遵循以下场景:
我已经通过使用多用户安装过程使用 RVM 来完成此操作(仅仅因为我只有 root 用户并且它会自动执行此操作)。之后这似乎工作正常,但我确实有一些问题:
直接安装Ruby而不是通过RVM会更有意义吗(我想也许是在效率方面 - 而且RVM在幕后做了一些魔法,以我不理解的方式修改一些bash_profile文件,这不知何故似乎有侵略性...)?
通过 RVM 作为单独用户安装是否更有意义(会出现任何安全问题)吗?
现在 Ruby 已经安装完毕,与它一起安装的最佳初始 gems 集是什么?
我只安装了捆绑程序,这样一旦我将应用程序上传到服务器上,我就可以运行捆绑安装命令,该命令将依次安装所需的应用程序 gem。
问题 - 我应该预先安装 Rails gem 吗?还有其他需要安装的gem吗?
这对我来说是棘手的地方。我正在尝试使用 apache 和 mod-passenger 进行部署(它们似乎是最受欢迎的)。所以我安装了 apache Web 服务器和乘客 gem 以及所有相关的依赖项(乘客提到的库)。
现在,问题出现了。首先是与用户相关的。 Apache是如何运行的?我的意思是在每个用户下?如果我使用 root 用户安装并(重新)启动它,它会永久在 root 用户下运行吗?这是坏事吗?如果是,我应该创建另一个用户吗?如果是,怎么办?我应该将新用户放入哪些组中,他应该拥有什么权限(即他应该有权访问哪些文件夹)。在这种情况下如何启动apache(在root下,在该用户下,在配置文件中的某处添加一行等)
网站配置的东西放在哪里?是否可以将其放入 apache.conf 中,还是应该在 site-available 中创建一个新文件?或者我应该简单地重复使用default那里已经存在的文件?如果在上一步中创建了一个新用户,他应该拥有与配置文件相关的哪些权限?
另外...最终将 Rails 应用程序放在哪里?最好放在哪个文件夹中?家下面的某个地方?也许在 /var/www 下?我想知道这会如何影响为应用程序提供服务的 apache 进程的权限? (通常我在提供应用程序时遇到问题,它抱怨它没有特定文件夹的权限。此外,使用新的资产管道 - 我不完全理解 - 正在创建资产文件,但它们似乎没有继承父文件夹权限...)
作为数据库,我使用 MySQL 并且安装它非常简单。我在这里提出的问题又与用户相关。我应该为数据库使用特殊用户吗? MySQL 实际上如何管理用户(他们是内部用户,还是 Linux 用户还是……?)。数据库用户应该与上面的“Web 用户”相同吗?或者应该换一种方式?
在这里我真的迷路了。我真的很难让资产管道发挥作用。我已经检查了 Railscasts 剧集以及 Rails 网站教程,我似乎在理论上理解了这一点,但在实践中我遇到了问题。
所以这里的问题是 - 我应该运行哪些命令来预编译资产? (尝试运行 rake asset:precompile)。可以吗?我应该在 Production.rb 文件中更改哪些内容?生成的资产如何与上面创建的网络用户或数据库用户相关?我个人在这一步中遇到了一个问题,即日志文件说某些 css 文件无法访问(例如,我在供应商/资产文件夹下安装了 jqplot 库,并且无法访问其文件 - 我应该以某种方式在此处添加清单文件吗? ?)。
如果有人能给我指出一篇好文章或解释所有这些内容的资源,那就太好了。我遇到问题的主要领域是 Apache、Passenger、Ruby、Rails 和 MySQL 如何与 Linux 用户交互。如何正确设置Rails应用程序文件夹的权限?资产管道如何影响用户权限?
谢谢