2011-11-13 152 views
11

我正在为服务器上的Rails 3.1.1应用程序寻找一个很好的部署教程。我的意思是完整的。我发布这个问题的原因是,虽然网上有大量的教程(谷歌,博客,书籍,其他stackoverflow问题等),他们似乎都集中在部署过程的问题或者对部署环境做出一些与我需要的不匹配的假设。Rails 3.1应用程序部署教程

我意识到,在服务器上部署Rails应用需要各种不同的程序和工具,需要进行配置,并且总是被卡在显然“小”的东西上,这让我非常沮丧。

那么,让我们从一开始就着手。我现在拥有的服务器可以通过SSH和域名访问,我们称之为www.example.com。服务器运行新的Ubuntu 10.04 x64,并且只安装了一个用户,即根(通过root用SSH访问服务器)。 注意!没有安装Apache,Ruby,PHP,MySQL,cPanel或任何其他面板,只是最低限度的全新安装。

此外,网络服务器将托管一个应用程序,数据库将运行在同一台计算机上。

从我所知部署Rails应用程序的过程遵循以下场景:

  • 安装Ruby

我已经用RVM使用多用户安装过程中这样做(只是因为我只有root用户,并且它自动执行)。这似乎工作良好后,但我有一些问题:

直接安装Ruby而不是通过RVM更有意义(我想可能在效率方面 - 也RVM做了一点魔术背后以不明白的方式修改一些bash_profile文件的情况,这种方式似乎是侵入性的......)?

通过RVM作为单独用户安装会更有意义吗(是否会出现安全问题)?

  • 必要宝石

现在的Ruby安装了什么是最好的初始设置的宝石沿侧安装它?

我只安装了bundler,这样一旦我将我的应用程序上传到服务器上,我就可以运行一个bundle install命令,它将依次安装所需的应用程序gems。

问题 - 我应该事先安装导轨宝石吗?是否还有其他需要安装的宝石?

  • Web服务器

这是对我来说变得非常棘手。我正在尝试使用apache和mod-passenger进行部署(它们似乎是最受欢迎的)。所以我安装了Apache Web服务器和乘客宝石以及所有相关的依赖项(乘客提到的库)。

现在,问题出现了。首先是用户相关的。 Apache如何运行?我的意思是在每个用户下?如果我使用root用户安装并重新启动它,它是否会永久运行在root用户下?这是坏事吗?如果是,我应该创建另一个用户吗?如果是,如何?我应该在哪些组中放置新用户,他应该拥有哪些权利(即他应该访问哪些文件夹)。如何在这种情况下启动Apache(下根,即用户在某处添加一行在配置文件中,等)

  • 网站配置

放在哪里的网站配置东东?将它放入apache.conf中,还是应该在可用站点中创建一个新文件?或者我应该简单地重复使用已存在的默认文件?如果在上一步创建了新用户,那么他对配置文件应该拥有哪些权限?

另外...哪里最终放置导轨应用程序?在哪个文件夹中最好?在家里的某个地方?也许在/ var/www下?我想知道这将如何影响服务应用程序的apache进程的权限? (通常我在提供应用程序时遇到问题,它会抱怨它没有特定文件夹的权限。另外,使用新的资产管道 - 我不完全了解 - 资产文件正在创建,它们似乎没有继承父文件夹权限...)

  • 数据库

由于数据库我使用MySQL和安装它是非常简单的。我在这里的问题与用户有关。我应该使用数据库的特殊用户吗? MySQL如何实际管理用户(它们是内部的,还是Linux用户或?)。数据库用户应该和上面的“网络用户”一样吗?或者它应该是一个不同的?

  • 资产

我在这里得到真正丢失。我真的有麻烦让资产管道工作。我已经检查了railscasts插曲以及rails网站教程,而且我似乎理论上理解了这件事,但我在实践中遇到了问题。

所以这里的问题是 - 我应该运行哪些命令来预编译资产? (试图运行rake资源:预编译)。可以吗?我应该在production.rb文件中更改哪些内容?生成的资产如何与上面创建的web用户或数据库用户相关联?我个人在这个步骤中遇到了问题,即日志文件说某些css文件不可访问(例如,我在vendor/assets文件夹下安装了jqplot库,并且它的文件无法访问 - 我应该在这里添加一个清单文件?)。

如果有人能把我指向一篇不错的文章或解释所有这些东西的资源,那将会非常棒。我遇到的主要问题是Apache,Passenger,Ruby,Rails和MySQL如何与Linux用户进行交互。如何正确设置Rails应用程序文件夹的权限?资产管道如何影响这个用户权限的东西?

谢谢

回答

8

这里是我的部署Rails的方式:

  • 安装Ruby

我不会使用RVM,因为它是非常棘手得到它结合运行正常像cron工作的东西。可行(例如使用包装),但有点麻烦。如果你不需要该机器上的其他Ruby版本,只需从源代码安装它。

  • 宝石

就让捆扎机工作它的魔力。请记住安装标志--without test development --deployment。尽管如此,我不会那样做。只要确保你有捆绑商。

  • Web服务器

使用客运(与Apache或Nginx的)是一个很好的和容易的选择。从apt安装Apache时,它将以特殊用户身份运行。

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

  • 网站配置

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

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

确保用户可以通过将您的应用程序分配给www-data组来访问您的应用程序。

  • 数据库

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

  • 资产

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

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

它有助于使用部署工具像Capistrano。运行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应用程序。我希望这会让你走。最近我写了一个宝石,用于将Chef -solo与Capistrano集成,名为capistrano-chef-solo。它非常简单,如果你刚开始部署,可能会有些复杂,但它可能会对你有所帮助。

+0

我很同意这里的一切。为了编译和安装没有RVM的系统Ruby,我们使用[ruby-build](https://github.com/sstephenson/ruby-build)(没有rbenv)。如果你使用Capistrano,你可能会很高兴,你真的需要安装捆绑软件gem,使用正确的命令行参数安装剩下的软件,Cap会为你做。 –