0

我一直在两台机器之间使用 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 中的某种类型的启动脚本中,以将它们全部集中到一个地方吗?每次切换机器时,它都会让我更轻松地建立一个开发环境。

4

3 回答 3

3

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

于 2012-08-20T23:19:50.537 回答
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提供了一个很好的起点和深入的帮助

于 2012-09-01T21:42:54.447 回答
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
于 2012-08-20T22:13:48.933 回答