Capistrano を使用して Ruby on Rails デプロイメントを合理化する:ステップバイステップ ガイド
この記事では、Ruby on Rails アプリケーションで Capistrano を構成します。次に、ホスティング プロバイダーから独立して、Ubuntu をオペレーティング システムとして実行するクラウド インスタンスにアプリをデプロイします。任意のクラウド サービス、またはオンプレミス サーバーを使用して、これから行う手順をテストまたは複製できます。
アプリをデプロイしたら、AppSignal を使用してアプリのデプロイメントを監視する方法を簡単に説明します。
しかしその前に、なぜ Capistrano を使用する必要があるのかと疑問に思うかもしれません。
Ruby on Rails アプリに Capistrano を選ぶ理由
最近でもデプロイメントに Capistrano を使い続けることに意味があるのかと疑問に思われるかもしれません。現在、導入と継続的統合に利用できるツールとサービスが多数あります。
しかし、それに答えるには、Capistrano の起源と現在に至るまでの進化を再考する必要があります。 Capistrano リポジトリで最初のタグが作成されたのは 2006 年でした。その目的は、すべて DSL を使用して、複数のマシン上で SSH 経由でリモートからコマンドを並行して実行できるようにすることでした。それ以来、Capistrano は各バージョンにいくつかの機能を追加することで進化してきました。
16 年を経て現在バージョン 3 となっている Capistrano は引き続き積極的に開発されており、現在では自動展開スクリプトを構築するためのフレームワークとして知られています。
つまり、リモート マシン上でコマンドを実行するための単なるツールではなくなりました。 Capistrano の機能に加えて、多くのプラグインやその他の gem が Capistrano で特別に実行されます。
このことと、大規模なコミュニティが依然として Capistrano を使用しているという事実により、Capistrano は自動展開のための優れたツールであり続けています。
Ruby on Rails アプリに Capistrano を追加する
まず、Ruby on Rails アプリケーションを構成して Capistrano と統合する必要があります。 Capistrano のドキュメントに従ってください。ただし、この投稿の範囲に必要な情報よりも多くの情報が含まれています。したがって、わかりやすくするために、この記事には必要な手順と構成のみが含まれています。
設定を開始するには、Gemfile の開発セクションに Capistrano gem を追加します。
データベースで移行を実行し、次のセクションで説明するアセットを処理するには、capistrano-rails gem が必要です。
ここで bundle install を実行します。 Capistrano をアプリケーションに追加するには:
その後、Capistrano をインストールできます。
このコマンドは、Capfile というファイルを作成します。 必要なライブラリをインポートして構成します。さらに、deploy.rb というファイル (config 内で作成) フォルダー) には、Capistrano のデプロイメントに含める必要があるすべての構成が含まれます。
注: Capistrano は、deploy.rb をオーバーライドするファイルを作成します。 ステージング環境と実稼働環境の両方の構成については、この記事では説明しません。
これで、Ruby on Rails アプリケーションとサーバー間の設定と通信を開始する準備が整いました。
Rails アプリ用の Capistrano を使用したサーバー構成
このステップでは、Capistrano 構成ファイルに命令を追加します。この手順により、アプリがデプロイされるサーバーに通信されます。ここで、アクセス情報とセキュリティ構成を定義します。
運用環境で開発で使用するバージョンと同じバージョンの Ruby を確実に実行するには、RVM などの Ruby バージョン マネージャーを使用します。 またはrbenv (Capistrano は両方をサポートしています)。
この記事では RVM を使用します。 RVM が開発マシンと運用サーバーにインストールされていることを確認してください。また、Ruby のバージョンが環境とプロジェクトで同じであるかどうかも確認してください。
capistrano-rvm を追加しています ジェム
Capistrano プロジェクトは、capistrano-gem と呼ばれる gem を提供します。 これにより、RVM を簡単に構成できます。これをプロジェクトに含めるには、開発グループ内の Gemfile に追加し、bundle install を実行します。
capistrano-rvm インポートを使用して Capfile を更新します。
デプロイ ファイルに、Ruby のバージョンと RVM へのパスを設定する構成を追加します (特に RVM のインストールに別のパスを使用した場合)。
Ruby のバージョンが定義されていない場合、Capistrano はアプリケーションがデプロイされるサーバーにインストールされている最新バージョンを選択します。
Capistrano::RVM には RVM 用の他の設定がありますが、ここに示されている設定は開始するために必要なものです。
サーバー構成をセットアップする
デプロイメント用のユーザーを定義することをお勧めします。導入を開始する前に、サーバー上で次の手順に従うことを忘れないでください。
<オル>~/home/YOUR_USER/.ssh/authorized_keys に追加します。 ファイル。/var/www/ への書き込み権限を設定します。 ディレクトリ。
Capistrano は、必要な環境に合わせて構成できます。 config/deploy/<environment_name>.rb 内に新しい設定ファイルを作成するだけです。 、次に、サーバーに接続するための IP または DNS、およびユーザー名を設定します。
デプロイメントのセットアップを完了するには、アプリケーション名やコード リポジトリ URL など、アプリケーションに関する情報を含めます。すべての環境で同じ情報を config/deploy.rb に追加する必要があります。 。特定の環境構成を config/deploy/<environment_name>.rb に保持します。 .
capistrano-secrets-yml をセットアップします Rails アプリのための宝石
capistrano-secrets-yml gem も設定する必要があります。
gem を Gemfile に追加し、バンドルを実行してインストールします。
それを Capfile にインポートします。
次に、config/secret.yml を作成します。 アプリケーションに秘密鍵ベースを環境変数として含めます。この変数は実稼働サーバー上に作成されます。覚えてない このファイルをリポジトリにコミットします。
ターミナルのアプリケーション フォルダー内で、次のコマンドを実行して秘密キー ベースを生成します。
生成されたキーをコピーし、それを使用して実稼働サーバー上の SECRET_KEY_BASE を設定します。運用サーバーにアクセスし、最後の ~/.bashrc で SECRET_KEY_BASE 変数をエクスポートします。 ファイルに保存されているため、いつでも利用できます:
ソースを実行して、環境内ですぐに利用できるようにします。
次に、マシンに戻り、ターミナルのアプリケーション フォルダーにアクセスし、以下の Capistrano コマンドを実行して config/secrets.yml を作成します。 実稼働サーバー上:
すべて完了しました!次に、移行を実行するように Capistrano を構成します。
データベース移行を実行するように Capistrano を構成する
次に、データベース関連のコマンドを実行するように Capistrano を構成します。
キャピストラーノ レール Gemfile にすでに含まれている gem は、デプロイメントごとに移行を実行するように構成できます。それを Capfile にインポートするだけです。
ただし、展開時にシードを実行したい場合は、移行後に実行する新しいタスクを作成する必要があります。
これで、アプリをデプロイする準備が整いました。
Ruby on Rails アプリのデプロイを開始します
サーバーをアプリケーションの新しいバージョンに直接更新することで、ローカル マシンからデプロイメントを実行する方法を見てみましょう。
デプロイメント コマンドを実行すると、Capistrano はサーバーに接続します。そこから、Capistrano は構成ファイル (config/deploy.rb) で定義されたリポジトリからコードのクローンを作成しようとします。 )。その後、展開フローに従って他のタスクが実行されます。
カピストラーノの deploy:check このコマンドは、Git 構成に問題がないこと、およびデプロイメントで使用されるディレクトリに Capistrano が正しくアクセスできることを検証します。
これを使用するには、環境を渡します。この場合、本番環境を使用しています。
設定に問題がなければ、本番環境への展開を開始できます。
さらに、次のコマンドを使用して、Capistrano で使用可能なすべてのタスクを確認できます。
さて、最後のステップとして、Ruby on Rails アプリケーションを AppSignal と統合し、監視を開始しましょう。
AppSignal を Capistrano および Rails アプリと統合する方法
AppSignal は監視ツールですが、なぜこの記事に取り上げられるのか疑問に思われるかもしれません。モニタリングは展開に直接関係しないため、これは正しい質問です。
とはいえ、AppSignal は、Ruby on Rails アプリケーションを監視し、各環境でのデプロイメントを追跡する場合には貴重なツールです。それでは、アプリに AppSignal を設定する方法を見てみましょう。
AppSignal アカウントが必要になります。AppSignal のサインアップ ページで作成できます。言語として Ruby を選択し、手順に従って AppSignal をアプリケーションにインストールします。
インストールすると、AppSignal を構成するためのファイルが作成されます。ここで重要なのはリビジョンを定義することです。 — アプリケーションの新しいバージョンがデプロイされているかどうかを確認するために、デプロイ後にチェックされる情報。この場合、Git ログをリビジョン情報として使用して、新しいコードのデプロイメントが AppSignal に確実に通知されるようにします。
また、AppSignal 環境変数を運用サーバーにエクスポートすることも推奨されます (特に API キーは、AppSignal 構成ファイルに保持されないようにします)。
これで、デプロイメントを再実行できるようになりました。すべてが正しく設定されている場合は、展開の最後に次のようなメッセージが表示されます。
これで、AppSignal でアプリケーションを確認できるようになります。 🎉

展開に関する情報:

デプロイメントの統合や、Ruby on Rails アプリケーションで利用できるその他の機能の詳細については、AppSignal のデプロイメント ドキュメント ページにアクセスしてください。
まとめと次のステップ
この投稿では、Capistrano を使用して Ruby on Rails アプリをデプロイする方法を検討しました。まず Capistrano をアプリに追加し、次にそれを構成してデプロイし、最後に AppSignal によるモニタリングを設定しました。
さらに詳しく調べたい場合は、リポジトリのパイプラインに接続された統合から実行するように Capistrano を構成できます。 Bitbucket、GitHub、GitLab などのツールは、このプロセスを管理するための設定を提供しており、Capistrano と組み合わせて使用できます。
コーディングを楽しんでください!
追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。
-
OpenStructがパフォーマンスを低下させる方法
私たちRubyistsは私たちのハッシュが大好きです。しかし、ハッシュにはいくつかのよく知られた欠陥があります。リチャードがHashieConsideredHarmfulで指摘したように、柔軟性が高すぎる場合があります。簡単なタイプミスで、意図していなかったキーを割り当てたり参照したりできます。 a = { type: F150 } a[:typo] # nil いくつかの一般的なハッシュの代替案 ハッシュを使用して実際の構造化データを格納している場合は、実際には柔軟性は必要ないと判断する可能性があります。それはあなたを困らせるだけだということ。 いくつかの選択肢があります。 XY座標の
-
Ruby開発者のための時間計算量への決定的なガイド
時間計算量は、コンピュータサイエンスから学ぶことができる最も興味深い概念のひとつであり、それを理解するのに学位は必要ありません! 特定のアルゴリズムやプログラムが遅い理由を確認するのに役立つので興味深いです &それをより速くするためにあなたは何ができますか。 これを独自のコードに適用できます。 これはすべての派手なアルゴリズムを超えて これは、この記事の後半で説明するように、コンピュータサイエンスの本にあります。 しかし、最初に、何が遅いのか、何が速いのかについて話す必要があります。 遅いvs速い 150ミリ秒(ミリ秒)で100万個の数値を並べ替えるのは遅いですか、それとも速いですか