2011-11-13 163 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會爲你做。 –