RailsでのThinkingSphinxのOpenShiftでSphinxを友達にする方法

Openshiftを使用して、小さなRailsプロジェクトをステージングします。 原則として、小規模なプロジェクトの場合、非常に便利です-便利な展開、箱から出して最も必要なものすべて。 魂には他に何が必要でしょうか? しかし、魂はスフィンクスを望み、同時に彼女はとても望んでいました。 カートリッジの中にスフィンクスが見つからなかったので、アドバイスを求めてグーグルに行きました。

しかし、Googleには何もない...まあ、またはほとんど何も。 誰もがDIYを上げること、すべてを手動でローリングすることを勧め、私の友人の何人かはAWSに移行するように勧めましたが、OpenShiftではスフィンクスを上げることができないことを認めたくありませんでした。 また、アプリケーションは既にレール用のアセンブリの下で回転しているため、DIYも作成したくありませんでした。また、既製の環境でスフィンクスを上げる方法を考え始めました。

カットの下で、私が思いついたもの。



Sphinxをインストールする



OpenShiftでrpmを使用しても同じことがきつく、すべての種類を配置します。 sphinxsearch.com/downloads/releaseページに移動し 、「ソースtarbal」を選択して、ページの一番下にあるリンク(「 sphinxsearch.com/files/sphinx-2.0.6-release.tar.gz 」)をコピーします。 私のリリースは2.0.6だったので、彼のために説明します。

次に、sshの下でアプリケーションに移動します。



rhc app show -a [APP_NAME]
      
      







「Git URL」パラメーターを見て、そこからUUIDを持つアドレスのみをコピーし、sshを介してサーバーに移動します。

tmpディレクトリに移動し、spinxをダウンロードしてインストールします。



 cd $OPENSHIFT_TMP_DIR wget http://sphinxsearch.com/files/sphinx-2.0.6-release.tar.gz tar -zxfv sphinx-2.0.6-release.tar.gz cd sphinx-2.0.6-release ./configure --prefix=$OPENSHIFT_RUNTIME_DIR make install
      
      







設定中に接頭辞に注意してください。そうしないと、スフィンクスは配信されません。



ThinkingSphinxのセットアップ



ここで、ThinkingSphinxを構成する必要があります(ローカルマシンで既にSphinxを構成していると仮定します。そうでない場合は、Sphinxに関する多くの情報があり、プロジェクトにOpenShiftから必要なすべてのファイルがあります)。 そのため、まず、OpenShiftではSphinxをlocalhostにバインドできないことを理解する必要があります。環境変数$ OPENSHIFT_INTERNAL_IPはOpenShiftのすべてのバインダーに使用されます。 また、Openshiftのすべてのポートがバインディングのためのアクセスを提供するわけではないことも理解する価値があります。 使用可能なポートの範囲は15,000〜35530です。 したがって、c onfig / sphinx.ymlに移動して、次のように記述します。



 production: address: <%=ENV['OPENSHIFT_INTERNAL_IP']%> port: 15000
      
      







このポートを選択しました。独自のポートを選択できます。主なことは、それが許容値内にあることです。

もう1つの制限があります。 OpenShiftはログファイルを標準のrailディレクトリ保存しないため、ログファイルのパスを指定する必要があります。



  searchd_log_file: <%=File.join(ENV['OPENSHIFT_LOG_DIR'],'searchd.log')%> query_log_file: <%=File.join(ENV['OPENSHIFT_LOG_DIR'],'searchd.query.log')%> pid_file: <%=File.join(ENV['OPENSHIFT_LOG_DIR'],'searchd.production.pid')%>
      
      







searchdデーモンは標準フォルダーにないため、configに登録する必要があります



  bin_path: <%=File.join(ENV['OPENSHIFT_RUNTIME_DIR'],'bin')%> searchd_binary_name: 'searchd' indexer_binary_name: 'indexer'
      
      







その結果、次のような構成になりました。

 production: searchd_log_file: <%=File.join(ENV['OPENSHIFT_LOG_DIR'],'searchd.log')%> query_log_file: <%=File.join(ENV['OPENSHIFT_LOG_DIR'],'searchd.query.log')%> pid_file: <%=File.join(ENV['OPENSHIFT_LOG_DIR'],'searchd.production.pid')%> address: <%=ENV['OPENSHIFT_INTERNAL_IP']%> port: 15000 bin_path: <%=File.join(ENV['OPENSHIFT_RUNTIME_DIR'],'bin')%> searchd_binary_name: 'searchd' indexer_binary_name: 'indexer'
      
      







展開を構成する



ここで、スフィンクスを再起動するためのルールを設定する必要があります。.openshift / action_hooks / deployに移動して、そこに次を記述します。

 bundle exec rake ts:config RAILS_ENV="production" bundle exec rake ts:rebuild RAILS_ENV="production"
      
      





これにより、新しい構成ファイルが作成され、インデックスが再構築され、デーモンが再起動されます。



ただし、デーモンは展開中にインデックスを一度だけ再構築します。 これを修正するには、cronのタスクを作成する必要があります。 私は毎分再構築することに決めたので、 .openshift / cronに アクセスして、次の内容のsphinx_rebuild ファイルを 細かく作成します

 !#/bin/bash cd $OPENSHIFT_REPO_DIR bundle exec rake ts:rebuild RAILS_ENV="production"
      
      





これで、毎分sphinxがインデックスを再構築するため、インデックスは現在のデータベースに関連したままになります。



私たちに残されたのは、舞台でスフィンクスの仕事を止めて楽しむことだけでした。 ちなみに、RailsでなくてもDIYですべて同じことができます。



All Articles