Skip to content

Instantly share code, notes, and snippets.

@BanzaiMan
Created June 21, 2012 18:24
Show Gist options
  • Save BanzaiMan/2967567 to your computer and use it in GitHub Desktop.
Save BanzaiMan/2967567 to your computer and use it in GitHub Desktop.
Enabling sphinx 2.0.4 on Engine Yard Cloud
#
# Cookbook Name:: sphinx
# Recipe:: default
#
# Set your application name here
appname = "todo"
# Uncomment the flavor of sphinx you want to use
flavor = "thinking_sphinx"
#flavor = "ultrasphinx"
# If you want to install on a specific utility instance rather than
# all application instances, uncomment and set the utility instance
# name here. Note that if you use a utility instance, your very first
# deploy may fail because the initial database migration will not have
# run by the time this executes on the utility instance. If that occurs
# just deploy again and the recipe should succeed.
utility_name = nil
# utility_name = "sphinx"
# If you want to have scheduled reindexes in cron, enter the minute
# interval here. This is passed directly to cron via /, so you should
# only use numbers between 1 - 59.
#
# If you don't want scheduled reindexes, just leave this set to nil.
# Setting it equal to 10 would run the cron job every 10 minutes.
cron_interval = nil
sphinx_version = '2.0.4'
enable_package "app-misc/sphinx" do
version sphinx_version
end
package "app-misc/sphinx" do
version sphinx_version
action :install
end
if utility_name
if ['solo', 'app', 'app_master'].include?(node[:instance_role])
run_for_app(appname) do |app_name, data|
ey_cloud_report "Sphinx" do
message "configuring #{flavor}"
end
directory "/data/#{app_name}/shared/config/sphinx" do
recursive true
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
template "/data/#{app_name}/shared/config/sphinx.yml" do
owner node[:owner_name]
group node[:owner_name]
mode 0644
source "sphinx.yml.erb"
variables({
:app_name => app_name,
:user => node[:owner_name],
:mem_limit => 32
})
end
end
end
if node[:name] == utility_name
run_for_app(appname) do |app_name, data|
ey_cloud_report "Sphinx" do
message "configuring #{flavor}"
end
directory "/var/run/sphinx" do
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
directory "/var/log/engineyard/sphinx/#{app_name}" do
recursive true
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
directory "/data/#{app_name}/shared/config/sphinx" do
recursive true
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
remote_file "/etc/logrotate.d/sphinx" do
owner "root"
group "root"
mode 0755
source "sphinx.logrotate"
backup false
action :create
end
template "/etc/monit.d/sphinx.#{app_name}.monitrc" do
source "sphinx.monitrc.erb"
owner node[:owner_name]
group node[:owner_name]
mode 0644
variables({
:app_name => app_name,
:user => node[:owner_name],
:flavor => flavor
})
end
template "/data/#{app_name}/shared/config/sphinx.yml" do
owner node[:owner_name]
group node[:owner_name]
mode 0644
source "sphinx.yml.erb"
variables({
:app_name => app_name,
:user => node[:owner_name],
:mem_limit => 32
})
end
execute "sphinx config" do
command "rake #{flavor}:configure"
user node[:owner_name]
environment({
'HOME' => "/home/#{node[:owner_name]}",
'RAILS_ENV' => node[:environment][:framework_env]
})
cwd "/data/#{app_name}/current"
end
ey_cloud_report "indexing #{flavor}" do
message "indexing #{flavor}"
end
execute "#{flavor} index" do
command "rake #{flavor}:index"
user node[:owner_name]
environment({
'HOME' => "/home/#{node[:owner_name]}",
'RAILS_ENV' => node[:environment][:framework_env]
})
cwd "/data/#{app_name}/current"
end
execute "monit reload"
if cron_interval
cron "sphinx index" do
action :create
minute "*/#{cron_interval}"
hour '*'
day '*'
month '*'
weekday '*'
command "cd /data/#{app_name}/current && RAILS_ENV=#{node[:environment][:framework_env]} rake #{flavor}:index"
user node[:owner_name]
end
end
end
end
else
if ['solo', 'app', 'app_master'].include?(node[:instance_role])
run_for_app(appname) do |app_name, data|
ey_cloud_report "Sphinx" do
message "configuring #{flavor}"
end
directory "/var/run/sphinx" do
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
directory "/var/log/engineyard/sphinx/#{app_name}" do
recursive true
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
directory "/data/#{app_name}/shared/config/sphinx" do
recursive true
owner node[:owner_name]
group node[:owner_name]
mode 0755
end
remote_file "/etc/logrotate.d/sphinx" do
owner "root"
group "root"
mode 0755
source "sphinx.logrotate"
backup false
action :create
end
template "/etc/monit.d/sphinx.#{app_name}.monitrc" do
source "sphinx.monitrc.erb"
owner node[:owner_name]
group node[:owner_name]
mode 0644
variables({
:app_name => app_name,
:user => node[:owner_name],
:env => node[:environment][:framework_env],
:flavor => flavor
})
end
template "/data/#{app_name}/shared/config/sphinx.yml" do
owner node[:owner_name]
group node[:owner_name]
mode 0644
source "sphinx.yml.erb"
variables({
:app_name => app_name,
:user => node[:owner_name],
:mem_limit => 32
})
end
execute "sphinx config" do
command "rake #{flavor}:configure"
user node[:owner_name]
environment({
'HOME' => "/home/#{node[:owner_name]}",
'RAILS_ENV' => node[:environment][:framework_env]
})
cwd "/data/#{app_name}/current"
end
ey_cloud_report "indexing #{flavor}" do
message "indexing #{flavor}"
end
execute "#{flavor} index" do
command "rake #{flavor}:index"
user node[:owner_name]
environment({
'HOME' => "/home/#{node[:owner_name]}",
'RAILS_ENV' => node[:environment][:framework_env]
})
cwd "/data/#{app_name}/current"
end
execute "monit reload"
if cron_interval
cron "sphinx index" do
action :create
minute "*/#{cron_interval}"
hour '*'
day '*'
month '*'
weekday '*'
command "cd /data/#{app_name}/current && RAILS_ENV=#{node[:environment][:framework_env]} rake #{flavor}:index"
user node[:owner_name]
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment