使用Rails自动启动ElasticSearch

时间:2012-08-20 22:07:40

标签: ruby-on-rails ruby elasticsearch

我一直在使用ElasticSearch在两台机器之间进行Ruby on Rails开发,并且开始变得有点烦人。我通常的工作流程是:

git pull
bundle install
rake db:migrate (or rake db:setup depending)
rails server
elasticsearch -f -D myconfig.xml
rake environment tire:import CLASS=MyObject FORCE=true

我是否可以将所有这些命令添加到Rails中的某些类型的启动脚本中以将它们全部集中到一个位置?每次切换机器时,这都会让我更容易开启开发环境。

3 个答案:

答案 0 :(得分:3)

我发现的最好方法是使用Foreman gem来启动您的项目和相关流程。

答案 1 :(得分:2)

看起来您应该在使用Capistrano的部署中执行此操作。以下是config / deploy.rb文件的示例:

[basic parts omitted]

after "deploy", "bundler:bundle_install"
after "bundler:bundle_install", "db:db_migrate"
after "deploy:db_migrate", "deploy:elastic_search_indexing"

namespace :bundler do
  desc 'call bundle install'
  task :bundle_install do
    run "cd #{deploy_to}/current && bundle install"
  end
end

namespace :db do
  desc 'fire the db migrations'
  task :db_migrate do
    run "cd #{deploy_to}/current && bundle exec rake db:migrate RAILS_ENV=\"production\""
  end
end

namespace :elasticsearch do
  desc 'run elasticsearch indexing via tire'
  task :index_classes do
    run "cd #{deploy_to}/current && bundle exec rake environment tire:import CLASS=YourObject FORCE=true "
  end
end

[rest omitted]

确保在/etc/elasticsearch/elasticsearch.yml中的目标计算机(Linux)上有一个配置文件,内容如下:

cluster:
   name:   elasticsearch_server

network:
   host:   66.98.23.12

最后一点要提到的是你应该创建一个初始化器config / initializers / tire.rb:

if Rails.env == 'production'
  Tire.configure do
    url "http://66.98.23.12:9200"
  end
end

如您所见,这是完全相同的IP地址,但仅用于生产环境。我假设您通过localhost在本地(在开发模式下)访问elasticsearch。 elasticsearch是默认为

的连接
 http://0.0.0.0:9200

一个很好的起点和深度帮助由令人敬畏的Ryan Bates和他的Railscasts提供http://railscasts.com/episodes?utf8=%E2%9C%93&search=capistrano

答案 2 :(得分:0)

什么阻止你把它放在bash脚本中?并将脚本放在RAILS_APP_HOME / scripts文件夹中?

#!/bin/sh
git pull
bundle install
rake db:migrate 
rails server
elasticsearch -f -D myconfig.xml
rake environment tire:import CLASS=MyObject FORCE=true