2013-08-01 68 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' –