RailsとSideKiqを配置します.を使用してCOM


Render.com Herokuにとって大きな代替手段である新しいプラットフォームのサービス提供です.Herokuとして“アプリ”の観点で考えるよりもレンダリングには「サービス」の概念があります.それで、あなたの柵アプリはサービスですあなたのデータベースは別のサービスになりますREDISは別のサービスなどのサービスも潜在的に複数のアプリケーション間で共有することができます.
すべての些細なレールアプリは、これらの日のニーズBackground Jobs そして、これのための人気のフレームワークはSidekiq . SideKiqデータストアとしてRedisを使用します.つまり、4つのサービスを展開してアプリケーションを実行する必要があります.
  • Rails Webサービス
  • SideKiqバックグラウンドサービス
  • PostgreSQLデータベース
  • レッドシス
  • レンダリングは「インフラストラクチャとしてのインフラストラクチャ」をサポートしていますgit 我々のアプリケーションのコードと一緒に.Ruby環境はネイティブにサポートされており、また、PostgreSQLのデータベースを提供しています.他に何かのために、私たちはDockerイメージを使用する必要があるので、Redisを使用することは小さいビットのトリッキーです.

    At the time of writing, Render is working on a managed Redis offering. When that's live, it should be easier to deploy and manage a Redis service.


    レンダリングは3つのサービスタイプをサポートします
  • Webサービス[インターネット経由で公開]https ポート80で
  • プライベートサービス[他のサービスにのみさらされる]
  • バックグラウンド労働者

  • レール
    WebサービスとしてRails Webアプリケーションを配備します.Sidekiq Workerはバックグラウンドワーカーとして、RedisはRender maintained Dockerfile .
    まず、生産のためのデータベースとプーマの設定を更新する必要があります.フォローthis section from Render's Rails deployment guide そして、このポストに戻ります.
    次に、アプリケーションが配備されたときに実行されるビルドスクリプトを追加する必要があります.ファイルを作成するrender-build.sh あなたのbin ディレクトリと次のコンテンツを追加します
    #!/usr/bin/env bash
    # exit on error
    set -o errexit
    
    bundle install
    bundle exec rake assets:precompile
    bundle exec rake assets:clean
    bundle exec rake db:migrate
    

    This script is also from Render's Rails deployment guide.


    次のコマンドを実行してスクリプトを実行可能にします.
    chmod a+x bin/render-build.sh
    
    最後に、インフラストラクチャ仕様を作成します.プロジェクトのルートで、render.yaml をペーストします.
    services:
      - type: web
        name: myapp-web
        env: ruby
        region: frankfurt # or oregon
        plan: starter
        numInstances: 1
        buildCommand: ./bin/render-build.sh
        startCommand: REDIS_URL="redis://${REDIS_HOST}" bundle exec puma -C config/puma.rb
        domains:
          - example.com # replace with your domain name
        envVars:
          - key: DATABASE_URL
            fromDatabase:
              name: myapp-db
              property: connectionString
          - key: REDIS_HOST
            fromService:
              name: myapp-redis
              type: pserv
              property: hostport
          - key: RAILS_MASTER_KEY
            sync: false
    
      - type: worker
        name: myapp-sidekiq
        env: ruby
        region: frankfurt # or oregon
        plan: starter
        buildCommand: bundle install && bundle exec rake assets:precompile
        startCommand: REDIS_URL="redis://${REDIS_HOST}" bundle exec sidekiq -e production
        envVars:
          - key: DATABASE_URL
            fromDatabase:
              name: myapp-db
              property: connectionString
          - key: REDIS_HOST
            fromService:
              name: myapp-redis
              type: pserv
              property: hostport
          - key: RAILS_MASTER_KEY
            sync: false
    
      - type: pserv
        name: myapp-redis
        env: docker
        region: frankfurt # or oregon
        repo: https://github.com/render-examples/redis.git
        numInstances: 1
        disk:
          name: myapp-redis-data
          mountPath: /var/lib/redis
          sizeGB: 1
    
    databases:
      - name: myapp-db
        plan: starter
        region: frankfurt # or oregon
    
    

    The full Render YAML specification is available here.


    上記のファイルのほとんどは自明です.私はあなたのアプリケーションに固有の何かにサービス名を変更することをお勧めします.唯一のトリッキーなビットはREDIS_URL 環境変数RailsとSideKIQサービス.管理サービスであるPostgreSQLとは異なり、REDISは一般的なプライベートサービスです.したがって、ホスト名とポートのみがレンダリングプラットフォームによって環境変数で我々に与えられます.これは、我々はredis:// 独自のURLへのプロトコルディレクティブ.
    これを行う最も簡単な方法はREDIS_HOST レンダリングが与える環境変数REDIS_URL 変数startCommand 当社のサービス.この方法は、上記のRailsとSideKIQサービスで行うことができます.

    If you run the Rails console in the Render dashboard, you'll need to invoke it using REDIS_URL="redis://${REDIS_HOST}" bundle exec rails console otherwise the console process won't be able to find the Redis service.


    そして最後に、私たちがしなければならないことは、このYAMLファイルをレンダリングするように接続することです.レンダリングダッシュボードに移動し、右上隅に新しいをクリックし、青写真を選択します.

    画面の指示に従ってあなたのリポジトリを接続し、行くには良いはずです!

    結論
    私は、私のアプリで上記のアプローチを使用していますScattergun . 今まで私は本当に満足している.私は、将来のためにレンダリングチームがストアに持っているものを見ることに興奮しています、そして、個人的に、私は予見可能な将来のすべての私のプロジェクトのために彼らを利用する予定です.

    更なる読書
  • Render's guide to deploying Rails
  • Render's guide to deploying Sidekiq
  • Render's guide to deploy persistent Redis
  • Render vs Heroku
  • Splasgunはあなたの着陸ページに電子メールアドレスを収集し、あなたのメーリングリストにメールを送信する最も簡単な方法です.Get started for free !