11

Ruby 1.9.3 と Rails 3.2.6 で構築された Ruby on Rails アプリを Apache と共に Windows マシンにデプロイする良い方法はありますか? 私は何時間もかけてフォーラムを精査しましたが、すべての投稿が古すぎて、最新バージョンの Ruby と Rails で動作しないようです。Mongrel はもはや開発中でなく、常に Rails をクラッシュさせます。thin は初歩的な Windows サポートしかなく、私のコンピューターでは Ruby ランタイムが「異常な方法で終了」します。Passenger は Linux のみです...ちょっと迷っていますこの時点で。

Windows 上の Apache を使用して最新のフレームワーク上に構築された Rails アプリを提供するための、安定した十分に文書化されたソリューションはありますか?

アップデート

私は最終的に私自身の解決策を考え出すことになりました。Windows での Rails デプロイの最新ガイドについては、以下をご覧ください。

4

2 に答える 2

16

更新:このプロセスで展開した会社に戻ったところです。製品の使用中に 11 か月間完全にメンテナンスを行わなかった後も、アプリとサーバー環境は問題なく機能しています:)

よし、やっと分かったみたいだ。私は会社のイントラネット上の少数のユーザー プールに展開しているため、私のソリューションがすべての人に役立つとは限らないことに注意してください。統合された Apache/Rails/MySQL インストールを含む優れたBitnami RubyStackを使用しています。そこから、次のことを行いました (Rails 3.2.6 と Ruby 1.9.3 で動作しました):

  1. すべての Apache および Rails (WEBrick/Thin/Mongrel/Unicorn) サーバーをシャットダウンします。開いている開発バージョンがある場合は、サイトを終了します。ブラウザのキャッシュをクリアします。

  2. まだ行っていない場合は、データベースを運用モードに移行します。RubyStack コマンド ラインから、cd でアプリのディレクトリに移動し、 を実行しますbundle exec rake db:migrate db:schema:load RAILS_ENV="production"。警告: db:schema:load は、本番データベースのすべてのデータを削除します。

  3. アセットをプリコンパイルします: bundle exec rake assets:precompile. アセットによっては、これには非常に長い時間がかかる場合があることに注意してください。

  4. あなたのhttpd.conf(私にとっては C:\RubyStack-3.2.5-0\apache2\conf\httpd.conf です)

    必要なモジュールがコメントアウトされていないことを確認してください。

    LoadModule expires_module modules/mod_expires.so
    LoadModule headers_module modules/mod_headers.so
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule rewrite_module modules/mod_rewrite.so
    

    次に、次のコードをファイルのどこかに貼り付けapp_nameます。Rails アプリのフォルダー名と、*:82Apache がリッスンしている任意のポート番号を指定します (次のコマンドで示されます) Listen <port_number>

    <VirtualHost *:82>
    
      # Your server's web or IP address goes here.
      # You can leave at localhost if deploying to
      # company intranet or some such thing.
      ServerName localhost
    
      # Customize the next two lines with your app's public directory
      DocumentRoot "C:/RubyStack-3.2.5-0/projects/app_name/public"
      <Directory "C:/RubyStack-3.2.5-0/projects/app_name/public">
        Allow from all
        Options -MultiViews
      </Directory>
    
      RewriteEngine On
    
      # Redirect all non-static requests to Rails server,
      # but serve static assets via Apache
      RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
      RewriteRule ^/(.*)$ balancer://app_balancers%{REQUEST_URI} [P,QSA,L]
    
      # Serves dynamic rails assets from multiple servers
      # to improve performance. A Rails server such as
      # thin or WEBrick must be running on at least one of
      # these ports in order for Apache to serve your site
      <Proxy balancer://app_balancers>
        BalancerMember http://localhost:3001/
        BalancerMember http://localhost:3002/
      </Proxy>
    
      # Support for far-futures expires header
      <LocationMatch "^/assets/.*$">
        Header unset ETag
        FileETag None
        # RFC says only cache for 1 year
        ExpiresActive On
        ExpiresDefault "access plus 1 year"
      </LocationMatch>
    </VirtualHost>
    
  5. アプリが使用する Rails サーバーごとに 1 つの Windows バッチ ファイル (*.bat) を作成します。バランサーのポートで本番モードで実行してください。たとえば、最初のサーバーの場合:

    @echo off
    cd D:\your_app_folder
    rails s -e production -p 3001
    
  6. 注: Rails サーバーはサービスとして実行する必要があるため、次のいくつかの手順が必要です。そうしないと、サーバーにログインしているユーザーがいない場合はシャットダウンされます。これにより、障害時に自動的に再起動することもできます。ただし、Windows は Batch ファイルをサービスとして実行できないため、Windows EXE に変換する必要があります。ただし、標準の Windows EXE は、OnStart および OnStop メソッドに応答しないため、サービスとして使用できません。そのため、最終的にサーバーを Windows サービスとして実行するには、Non-Sucking Service Manager を Windows EXE のフロントエンドとして使用する必要があります。

  7. BAT から EXE へのコンバーターをダウンロードし (Google で検索してください)、バッチ ファイルから EXE を作成します。取得したコンバーターに、実行時にコマンド ウィンドウを非表示にするオプションがあることを確認してください (そのオプションは通常、「可視性」などと呼ばれます)。

  8. Non-Sucking Service Manager (nssm.exe)をダウンロードします。永続的な場所に置き、そのフォルダーをパスに追加します。

  9. コマンド プロンプトを起動します。と入力しますnssm install <servicename>。ここで<servicename>、サービスを呼び出したいものを入力します。サービスとして実行するアプリケーションへのパスを入力するよう求められます。手順 7 で作成した Windows EXE を選択し、[インストール] をクリックして、コマンドライン オプションを空白のままにします。

  10. バランサーのすべてのポートに対して手順 6 ~ 8 を繰り返し、Rails サーバーごとに異なるサービスを作成します。

  11. 作成したすべてのサービスを開始します ([スタート] メニュー -> [管理ツール] -> [サービス])。サービスはすぐに開始されますが、Rails サーバーの初期化には少なくとも 30 秒かかる必要があります。

  12. アパッチを起動します。起動しない場合は、必要なモジュールがすべて含まれているかどうかを確認してください (ステップ 4 の最初の部分にリストされています)。

  13. に移動しlocalhost:82ます。カスタマイズした場合は、ポート番号を 82 に置き換えます。サイトが開発中とまったく同じように見えるはずです。

これが長すぎて StackOverflow に適していない場合はお知らせください。私はこの問題にかなりの時間を費やしてきましたが、誰かが Windows での Rails の展開に関する最新のガイドを作成する時が来たと考えました (もしあれば、私はまだ見ていません)。頑張ってください。誰かがこれに問題や拡張機能を持っているかどうか教えてください!

于 2012-07-23T20:25:08.920 に答える
0

XAMPP は、この適切なガイドを達成するのに役立つかもしれません: http://www.andriets.com/development-en/ruby/ruby-xampp-en.html

于 2012-07-03T15:09:46.750 に答える