我有一個nginx +乘客鏈爲我的軌道應用程序。開始思考斯芬克斯在軌道服務器啓動
現在,經過每次重新啓動服務器,我需要在終端編寫項目文件夾
rake ts:start
中,但我怎樣才能使自動化呢?
這樣,每個服務器重新啓動後,思維獅身人面像自動啓動,而不需要我的終端命令?
我使用Rails 3.2.8和Ubuntu 12.04。
我無法想象我可以嘗試什麼,請幫助我。
我該怎麼做,給一些建議?
我有一個nginx +乘客鏈爲我的軌道應用程序。開始思考斯芬克斯在軌道服務器啓動
現在,經過每次重新啓動服務器,我需要在終端編寫項目文件夾
rake ts:start
中,但我怎樣才能使自動化呢?
這樣,每個服務器重新啓動後,思維獅身人面像自動啓動,而不需要我的終端命令?
我使用Rails 3.2.8和Ubuntu 12.04。
我無法想象我可以嘗試什麼,請幫助我。
我該怎麼做,給一些建議?
有兩種選擇我可以想到。
/etc/init
?)。Monit和其他工具的問題在於,當你故意停止Sphinx(比如更新配置結構和相應的索引更改)時,它可能會在適當之前再次啓動它。所以我認爲你應該從這兩個選項中的第一個開始 - 我只是不瞭解這種方法的更多細節。
我做了什麼來解決同樣的問題:
在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來管理服務。
對我來說(rails4,mysql2,ts-3.1.0)它是'救援ThinkingSphinx :: ConnectionError'。 – contradictioned
我遵循@ 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
應停止update-rc.d thinking_sphinx defaults
有上debian-administration.org好的帖子名爲making scripts run at boot time有更多的細節。
如果您使用的是優秀的whenever寶石來管理你的crontab,你可以把
every :reboot do
rake "ts:start"
end
在
schedule.rb
,它似乎工作的偉大。我剛剛測試了一個運行Ubuntu 14.04的EC2實例。
謝謝!經過4個小時的失敗'每當'它有助於解決我的問題!但我使用命令運行它: 'every:reboot do command「cd#{Dir.pwd} && RAILS_ENV =#{@ environment} bundle exec rake ts:restart」 end' –
有一件事你可以在rails應用程序的初始化文件夾中創建一個文件ts_server_start.rb並在那裏你可以使用'system'rake ts:start「'它會在應用程序初始化時自動啓動 –
@Rajarshi但是如何成爲如果它已經開始了?將很好地添加一些檢查 – brabertaser19