我一直在使用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中的某些类型的启动脚本中以将它们全部集中到一个位置?每次切换机器时,这都会让我更容易开启开发环境。
答案 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