しかし、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ですべて同じことができます。