2014-09-23 54 views
17

我一直在sidelog工作在heroku生產環境中掙扎了兩天。我已經閱讀了所有關於類似問題的可用文檔,但仍然無法提供可行的解決方案,我真的很想找一些幫助!sidekiq在heroku上不生成sidekiq.pid文件,與Redistogo一起使用

Heroku的部署後,我的應用程序崩潰,我碰到下面的錯誤堆棧跟蹤:

2014-09-23T23:38:40.905093+00:00 app[worker.1]: No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid 
2014-09-23T23:38:40.905122+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `<main>' 
2014-09-23T23:38:40.905119+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/bin/sidekiq:7:in `<top (required)>' 
2014-09-23T23:38:40.905117+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `write_pid' 
2014-09-23T23:38:40.905115+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `open' 
2014-09-23T23:38:40.905121+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `load' 
2014-09-23T23:38:40.905118+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:41:in `parse' 
2014-09-23T23:38:40.905114+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `initialize' 
2014-09-23T23:38:39.588001+00:00 heroku[worker.1]: State changed from starting to up 

首先,sidekiq是我的本地機器上正常工作。我在本地製作中使用了heroku的REDISTOGO for redis,sidekiq已經正確指出了REDISTOGO並且運行良好。

二,根據堆棧跟蹤,特別是這行No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid;它導致我認爲在heroku上運行時出於某種原因sidekiq.pid文件未正確生成。在本地環境中,每次在app/tmp/pids/目錄中啓動應用程序時都會生成sidekiq.pid文件,並且每次都會指定一個不同的pid數字。我是guessing,當在heroku上運行時,sidekiq試圖從這個文件中讀取,但是找不到它。

這裏是我的Procfile內容:

web: bundle exec rails server 
worker: bundle exec sidekiq -C config/sidekiq.yml 

下面是內容在我的config/sidekiq.yml

--- 
:verbose: true 
:pidfile: ./tmp/pids/sidekiq.pid 
:concurrency: 25 
# Set timeout to 8 on Heroku, longer if you manage your own systems. 
:timeout: 8 
:queues: 
    - carrierwave 

下面是內容在我的sidekiq.rb

Sidekiq.configure_server do |config| 
    config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"} 
end 

Sidekiq.configure_client do |config| 
    config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"} 
end 

更新1

我正在使用carrierwavecarrierwave-backgroundersidekiq同步。

+0

你爲什麼要創建一個pidfile? – 2014-09-24 00:03:58

+0

@MikePerham嘿邁克,我知道你是sidekiq的作者,我很欣賞你對這件事的關注!我沒有故意使用'pid'。我是新來的sidekiq,我認爲這是默認行爲,因爲在我的實現過程中,我沒有遇到任何引用'pid'的任何配置。你會建議什麼,我做錯了什麼?也許不使用pid是實現sidekiq的最佳方式?我沒有在pid部分找到太多的文檔。 – Stephens 2014-09-24 00:26:52

+0

@MikePerham在我的本地環境中,每次使用'工頭開始',我看到以下幾行: '17:28:57 web.1 |開始於pid 20788' '17:28:57 worker.1 |開始於pid 20789' pid號碼每次都會有所不同。 – Stephens 2014-09-24 00:31:06

回答

24

此問題已得到解決通過以下操作:

:pidfile: ./tmp/pids/sidekiq.pid 

2:

1)由於@MikePerham指着我正確的方向,首先我在sidekiq.yml文件中刪除此行)然後,在我的Procfile,我不得不使用下面的行替換產地:

web: bundle exec rails server -p $PORT 
worker: bundle exec sidekiq -C config/sidekiq.yml 

現在sidekiq與紅色正常工作istogo在heroku上給我。

+0

這個工作就像一個驚人的魅力。非常感謝你! – 2016-06-02 02:12:49

8

的根做pids目錄tmp目錄,我發現它是有用的目錄添加到存儲庫,並重新部署應用程序。

mkdir -p tmp/pids 
touch tmp/pids/.gitkeep 
git add -f tmp/pids/.gitkeep 
git commit -m 'Keep tmp/pids directory in repo' 

希望這會有所幫助。

+0

它的工作原理。謝謝! – 2016-08-02 15:17:45

+0

這工作。 Rails 4,Foreman和Sidekiq。 – 2016-10-03 20:03:42

+0

它的工作原理。謝謝! – Jason 2016-10-06 01:27:48

相關問題