2013-08-01 66 views
1

我有一个nginx +乘客链为我的轨道应用程序。开始思考斯芬克斯在轨道服务器启动

现在,经过每次重新启动服务器,我需要在终端编写项目文件夹

rake ts:start 

中,但我怎样才能使自动化呢?

这样,每个服务器重新启动后,思维狮身人面像自动启动,而不需要我的终端命令?

我使用Rails 3.2.8和Ubuntu 12.04。

我无法想象我可以尝试什么,请帮助我。

我该怎么做,给一些建议?

+1

有一件事你可以在rails应用程序的初始化文件夹中创建一个文件ts_server_start.rb并在那里你可以使用'system'rake ts:start“'它会在应用程序初始化时自动启动 –

+0

@Rajarshi但是如何成为如果它已经开始了?将很好地添加一些检查 – brabertaser19

回答

1

有两种选择我可以想到。

  • 你可以看看Ubuntu如何管理启动脚本并为此添加一个(可能在/etc/init?)。
  • 您可以设置monit或其他监视工具并让它保持运行。 Monit应该在服务器重新启动时自动启动,因此它应该确保Sphinx(以及其他任何正在跟踪的内容)正在运行。

Monit和其他工具的问题在于,当你故意停止Sphinx(比如更新配置结构和相应的索引更改)时,它可能会在适当之前再次启动它。所以我认为你应该从这两个选项中的第一个开始 - 我只是不了解这种方法的更多细节。

3

我做了什么来解决同样的问题:

config/application.rb,添加:

module Rails 
    def self.rake? 
    [email protected] 
    end 

    def self.rake=(value) 
    @rake = !!value 
    end 
end 

Rakefile,加入这一行:

Rails.rake = true 

最后,在config/initializers/start_thinking_sphinx.rb地说:

unless Rails.rake? 
    begin 
    # Prope ts connection 
    ThinkingSphinx.search "test", :populate => true 
    rescue Mysql2::Error => err 
    puts ">>> ThinkingSphinx is unavailable. Trying to start .." 
    MyApp::Application.load_tasks 
    Rake::Task['ts:start'].invoke 
    end 
end 

(用你的应用名称替换上面的MyApp

似乎工作到目前为止,但如果我遇到任何问题,我会回到这里。

显然,上面的内容并不关心服务器保持运行状态。你可能想单独做这件事。或者可以使用Upstart来管理服务。

+0

对我来说(rails4,mysql2,ts-3.1.0)它是'救援ThinkingSphinx :: ConnectionError'。 – contradictioned

0

我遵循@ pat的建议,并写了一个脚本,在服务器启动时启动ThinkingSphinx。你可以看到它作为一个要点 - https://gist.github.com/declan/4b7cc4fb4926df16f54c

我们使用Capistrano部署到Ubuntu 14.04,并且您可能需要修改路径和用户名以匹配您的服务器设置。否则,所有你需要做的是

  • 将这个脚本放到/etc/init.d/thinking_sphinx
  • 确认脚本的工作原理:在命令行上调用/etc/init.d/thinking_sphinx start应该开始ThinkingSphinx为您的应用程序,并/etc/init.d/thinking_sphinx stop应停止
  • 告诉Ubuntu的在启动时自动运行此脚本:update-rc.d thinking_sphinx defaults

有上debian-administration.org好的帖子名为making scripts run at boot time有更多的细节。

2

如果您使用的是优秀的whenever宝石来管理你的crontab,你可以把

every :reboot do 
    rake "ts:start" 
end 
schedule.rb

,它似乎工作的伟大。我刚刚测试了一个运行Ubuntu 14.04的EC2实例。

+1

谢谢!经过4个小时的失败'每当'它有助于解决我的问题!但我使用命令运行它: 'every:reboot do command“cd#{Dir.pwd} && RAILS_ENV =#{@ environment} bundle exec rake ts:restart” end' –