Rails 3.1应用程序部署教程

2024-04-15

我正在寻找一个关于服务器上 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 进程的权限? (通常我在提供应用程序时遇到问题,它抱怨它没有特定文件夹的权限。此外,使用新的资产管道 - 我不完全理解 - 正在创建资产文件,但它们似乎没有继承父文件夹权限...)

  • Database

作为数据库,我使用 MySQL 并且安装它非常简单。我在这里提出的问题又与用户相关。我应该为数据库使用特殊用户吗? MySQL 实际上如何管理用户(他们是内部用户,还是 Linux 用户还是……?)。数据库用户应该与上面的“Web 用户”相同吗?或者应该换一种方式?

  • Assets

在这里我真的迷路了。我真的很难让资产管道发挥作用。我已经检查了 Railscasts 剧集以及 Rails 网站教程,我似乎在理论上理解了这一点,但在实践中我遇到了问题。

所以这里的问题是 - 我应该运行哪些命令来预编译资产? (尝试运行 rake asset:precompile)。可以吗?我应该在 Production.rb 文件中更改哪些内容?生成的资产如何与上面创建的网络用户或数据库用户相关?我个人在这一步中遇到了一个问题,即日志文件说某些 css 文件无法访问(例如,我在供应商/资产文件夹下安装了 jqplot 库,并且无法访问其文件 - 我应该以某种方式在此处添加清单文件吗? ?)。

如果有人能给我指出一篇好文章或解释所有这些内容的资源,那就太好了。我遇到问题的主要领域是 Apache、Passenger、Ruby、Rails 和 MySQL 如何与 Linux 用户交互。如何正确设置Rails应用程序文件夹的权限?资产管道如何影响用户权限?

谢谢


这是我部署 Rails 的方法:

  • 安装红宝石

我不会使用 RVM,因为要让它与 cron 作业等内容正确运行是非常棘手的。可行(例如使用包装器),但有点麻烦。如果您在那台机器上不需要其他 Ruby 版本,只需自己从源代码安装即可。

  • Gems

让 Bundler 发挥它的魔力吧。请记住使用标志进行安装--without test development --deployment。但我不会预先这样做。只要确保您有捆绑器即可。

  • 网络服务器

使用 Passenger(与 Apache 或 Nginx 一起使用)是一个很好且简单的选择。当您从 apt 安装 Apache 时,它​​将以特殊用户运行。

Apache 在 Ubuntu 上自动正确配置。它将在重新启动时启动。

  • 网站配置

所有配置都在 /etc/apache2.conf 中将虚拟主机配置放在 /etc/apache2/sites-available 中并使用a2ensite来启用它。

将您的应用程序放入/var/www,因为这是 Ubuntu 中的默认位置。我通常创建一个部署用户。

确保用户可以通过将您的应用程序分配给www-data group.

  • Database

MySQL有自己的用户系统。以 root 用户身份登录并使用 SQL 创建一个新用户:GRANT ALL ON 'application_production'.* TO 'deploy' IDENTIFIED BY 'some password';

  • Assets

资产应作为拥有应用程序的用户生成。您应该将所有 css 和 javascript 文件添加到 production.rb。例如:

config.assets.precompile += %w(backend.css)
  • 结论

它有助于使用像这样的部署工具卡皮斯特拉诺 http://capify.org。当你跑步时capify,取消注释中相应的行Capfile获得资产编译。这是我的:

ENV['RAILS_ENV'] = 'production'
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
load 'deploy/assets'
load 'config/deploy'
require 'capistrano/ext/multistage'
require "bundler/capistrano"
require 'capistrano_colors'

这就是我通常安装 Rails 应用程序的方式。我希望这能让你继续前进。最近我写了一个用于集成的 gemChef http://www.opscode.com/chef/-与卡皮斯特拉诺独奏,称为卡皮斯特拉诺厨师独奏 https://github.com/iain/capistrano_chef_solo。它还处于 alpha 阶段,如果您刚刚开始部署,可能会有点太复杂,但它可能会对您有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3.1应用程序部署教程 的相关文章

随机推荐