2011-11-13 11 views
11

サーバー上のRails 3.1.1アプリケーションのデプロイメントチュートリアルを探しています。そして、良いことによって私は実際に完全な意味を持っています。私がこの質問を投稿しているのは、ウェブ上にたくさんのチュートリアルがありますが(Google、ブログ、書籍、その他のstackoverflowの質問など...)、それらのすべてはデプロイメントプロセスの問題または私が必要とするものと一致しない展開環境についていくつかの前提をすることができます。Rails 3.1のアプリケーションデプロイメントチュートリアル

私は、サーバーにRailsアプリケーションをデプロイするには、構成が必要なさまざまなプログラムとツールを必要としていることに気がつきました。

ここから始めましょう。今私が持っているのは、SSHとドメイン名でアクセスできるサーバです。www.example.comとしましょう。サーバーは新鮮なUbuntu 10.04 x64を実行し、ただユーザーがインストールされています。つまりroot(rootを介してSSHでサーバーにアクセスします)です。 注! Apache、Ruby、PHP、MySQL、cPanel、またはその他のパネルはインストールされていません。新しくインストールされた最小限です。

また、Webサーバーは単一のアプリケーションをホストし、データベースは同じマシン上で実行されます。

私の知識から、Railsアプリケーションをデプロイするプロセスは、次のシナリオを次に示します。

ルビー

をインストール

  • 私はすでに(マルチユーザーインストールプロセスを使用して、RVMを使って、これをしませんでした私はrootユーザーしかいないので、自動的に実行します)。これはうまく働いているようですが、いくつか質問があります:

    Rubyを直接インストールしてRVMをインストールしない方が理にかなっていますか(私は多分効率の点で考えています。私が理解できない方法でいくつかのbash_profileファイルを修正してscenceを作成しましたが、これは何とか侵略的です...)?

    RVMを使用して別のユーザーとしてインストールする方が安全でしょうか(安全上の問題はありますか)?

    • 必要な宝石

    今のRubyが側面に沿って、それをインストールするには、宝石の最良の初期設定がどうなるかがインストールされていること?

    私はアプリケーションをサーバーにアップロードすると、必要なアプリケーションの宝石をインストールするバンドルインストールコマンドを実行できます。

    質問 - 手前にレールの宝石を取り付けるべきですか?インストールする必要がある他の宝石はありますか?

    • Webサーバー

    それは私のためにトリッキー取得する場所です。私は展開のためにapacheとmod-passengerを使用しようとしています(彼らが最も人気があるようです)。そこで、私はApache Webサーバーと乗客の宝石とすべての関連する依存関係(乗客が言及したライブラリ)をインストールしました。

    今、問題が発生します。まず、ユーザーが関連しています。 Apacheはどのように動作しますか?私は各ユーザーの下にあるのですか?私がそれをインストールしてrootユーザを使って(再)起動した場合、それはrootユーザの下で永久に実行されますか?これは悪いことですか?はいの場合、別のユーザーを作成する必要がありますか?はいの場合、どうですか?新しいグループをどのグループに入れるべきか、彼にはどのような権限が必要ですか(つまり、どのフォルダにアクセス権があるべきか)。この場合にはApacheを起動する方法

    • ウェブサイトの設定(ルートの下に、そのユーザーの下など、設定ファイルのどこかに行を追加します)

    はどこウェブサイトの構成を置くためにもの? apache.confに入れても構いませんか、またはサイトに新しいファイルを作成する必要がありますか?または、すでにそこにあるのデフォルトファイルを再利用するだけですか?前の手順で新しいユーザーが作成された場合、設定ファイルに関連してどのような権限が必要ですか?

    また、最終的にレールアプリケーションをどこに置くのですか?どのフォルダでそれが最善でしょうか?家のどこか?たぶん/ var/wwwの下に?私はこれがアプリを提供するApacheプロセスの権利にどのように影響するのか知りたいのですが? (一般的に私はアプリを提供しているときに問題を抱えていますが、特定のフォルダに対する権利を持っていないと訴えています。私はMySQLを使用して、それをインストールしてい

    • データベース)...データベースとして

    を親フォルダの権限を継承することは非常に簡単です。ここで私が持っている質問は、再びユーザーに関連しています。データベースに特別なユーザーを使用する必要がありますか? MySQLは実際にどのようにユーザーを管理していますか(内部的な人ですか、それともLinuxのユーザーですか...?)。データベースユーザは上記の "ウェブユーザ"と同じであるべきですか?それとも違うはずですか?

    • 資産ここ

    私は本当に迷子に。私は本当に資産をパイプラインの仕事にするのに困っている。私はrailscastsのエピソードとレールのWebサイトのチュートリアルをチェックして、理論的にはそのことを理解しているようですが、実際には問題があります。

    ここでの質問は、資産をプリコンパイルするためにどのコマンドを実行する必要があるのでしょうか? (rakeアセットを実行しようとする:プリコンパイル)。大丈夫ですか? production.rbファイルで何を変更する必要がありますか?上記で作成されたWebユーザーまたはデータベースユーザーとの関係で生成されたアセットはどのように機能しますか?私は個人的にこのステップで問題を抱えています。つまり、ログファイルには、いくつかのcssファイルがアクセスできない(たとえば、ベンダー/資産フォルダの下にjqplotライブラリがインストールされていて、そのファイルにアクセスできません。 ?)。

    誰かが素晴らしい記事、またはこれらのすべてを説明するリソースに向けて私を指すことができれば、本当に素晴らしいことでしょう。私が問題を抱えている主な領域は、Apache、Passenger、Ruby、Rails、MySQLがLinuxユーザーとどのように対話するかです。どのようにRailsのアプリケーションフォルダの権限を正しく設定するには?アセットパイプラインがこのユーザー許可の内容にどのように影響しますか?

    ありがとう

答えて

8

はここで展開Railsの私の方法です:

  • ルビーをインストール
それはそれはとの組み合わせで適切に動作させるには非常にトリッキーですので、私はRVMを使用していないだろう

cronジョブのようなもの。 Doable(ラッパーなど)が、少し面倒です。そのマシンに他のRubyバージョンを必要としない場合は、ソースからインストールするだけです。

  • 宝石

ちょうどバンドラーはその魔法を操作できます。フラグ--without test development --deploymentとともにインストールすることを忘れないでください。私はそれを前にしていないだろう。バンドラを持っていることを確認してください。 (Apacheやnginxのいずれかで)旅客を使用して

  • Webサーバー

は罰金や簡単な選択です。 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';

  • 資産

資産がアプリケーションを所有するユーザーとして生成する必要があります。 production.rbにcssファイルとjavascriptファイルを追加する必要があります。たとえば、次のように

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' 

これは私が通常私のレールアプリをインストールする方法です。私はこれがあなたを得ることを望む。最近私は、capistrano-chef-soloと呼ばれるChef-soloとCapistranoを統合するための宝石を書いています。非常にアルファですが、デプロイメントを始めたばかりの人はちょっと複雑かもしれませんが、役立つかもしれません。

+0

私はここにあるほとんどすべてに同意します。 RVMのないシステムRubyをコンパイルしてインストールするには、[ruby-build](https://github.com/sstephenson/ruby-build)(rbenvなし)を使用します。 Capistranoを使用する場合は、バンドラ宝石がインストールされている必要があります。正しいコマンドライン引数を付けて残りをインストールすると、Capがあなたのために行います。 –