JRuby on RailsアプリケーションをTomcatにデプロイする最良の方法は何ですか?
-
02-07-2019 - |
質問
テストのためにTomcatインスタンスにRuby on Railsアプリ(JRuby上で実行)をデプロイする方法を探しています。
Tomcatインスタンスは、SSHを実行できるSolarisサーバーで実行されています。私はCapistranoの使用を見てきましたが、Tomcatにデプロイするために使用したり、JRubyの下で実行したりすることについてはそれほど多くはないようです。私のPCは稼働しています(はい、企業です-私の選択ではありませんが、私はそれと一緒に暮らさなければなりません)。
.warファイルを使用して.warファイルを作成しています。手動でコピーして展開すると、アプリは正常に展開および実行されます。実際にそこに到達するために、もっと簡単で自動化されたものが欲しいのです。
誰もこれをやったことがありますか?ウェブ上のドキュメントはかなり薄いようです。
解決
これについてはあまり経験がないので、最善の方法を提供できるかどうかはわかりませんが、Capistranoが機能せず、実行するためだけに別のMRIをインストールできない場合、いくつかの選択肢が残っています:
プレーンなRakeを実行して、独自の展開ターゲットを記述してください。 http://www.gra2.com/article。 php / deploy-ruby-on-rails-applications-rake
またはAntまたはMavenを使用します。
または、デプロイする必要があるサーバーが1つだけの場合、シャットダウン/起動要求をサーバーでリッスンするRubyスクリプトと、実行するローカルの2つのRubyスクリプトを一緒にハックできます:send shutdown、scp overファイル、スタートアップを送信します。
ところで、Capistranoで見つかった統合バグをJRubyチームに提出しましたか?私は彼らがどんな貢献をしても喜んでいると確信しています。 :)
他のヒント
JRubyを使用してRailsプロジェクトを実行し、Tomcatサーバーにデプロイしています。ほぼすべてを自動化するため、Capistranoを使用して展開することにしました。 Tomcatで実行するには、Capistranoのデプロイメントライフサイクルにいくつかの小さな変更を加える必要がありました。
ステップ1:カピストラーノがコードを更新した後、サーバーで実行するワーブルタスクを作成しました:
desc "Run the warble command to deploy the site"
namespace(:deploy) do
task :warble do
run ". ~/.profile;cd #{release_path};warble"
end
end
そして、以下を使用してCapistranoライフサイクルにフックしました:
after 'deploy:update_code', 'deploy:warble'
私のTomcatサーバーには、warbleによって作成された#{release_path} / tmp / war
ディレクトリを指すシンボリックリンクがあります。これが気に入らない場合は、warbleタスクを簡単に変更して、代わりにwarファイルをTomcatディレクトリーに移動することができます。
ステップ2: deploy:start
および deploy:stop
タスクをオーバーライドして、MongrelサーバーではなくTomcatサーバーを開始します:
desc "Starts the Tomcat Server"
namespace(:deploy) do
task :start do
sudo "#{tomcat_home}/bin/startup.sh"
end
end
desc "Shutdown the Tomcat Server"
namespace(:deploy) do
task :stop do
sudo "#{tomcat_home}/bin/shutdown.sh"
end
end
JRubyインタープリターではなくMRIを使用してCapistranoタスクを実行します。
「Vlad the deployer」を見る価値があるかもしれませんが、リモートサーバー上でタスクを実行できるようにremote_taskをRakeに追加します。しかし個人的には、サーバー上に標準のRakeタスクを持ち、sshで実行してそのタスクを実行することを好みます-その後、svn checkoutを実行し、WARファイルを作成します...
これにはおそらくAntを使用します。結局のところ、それは単なる別のWARファイルですよね?使用しているTomcatのバージョンはわかりませんが、バージョン4.1x デプロイ用のAntタスクが付属していますTomcatへ。
TomcatにデプロイするためのいくつかのCapistranoレシピがあります- capistrano-tomcat 。ビルドしたWAR(おそらく Warbler を使用)を受け取り、Tomcatインスタンスをデプロイして起動しますリモートサーバー。
ソースはGithubでアップしています: http://github.com/rhunter/capistrano-tomcat