Ruby: ワーカーを開始できません - check_for_activated_spec
概要
Sidekiq で一部のジョブを実行できません。そしてどうやらバンドラーと関係があるようです…もしかしたら。
pumactl start を使用して puma サーバーを実行すると、次のようなログが記録されます。
[156149] ! Unable to start worker
[156149] /home/todd/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/bundler-2.3.25/lib/bundler/runtime.rb:309:in `check_for_activated_spec!'
現在、sidekiq 6.5.6 と Bundler 2.3.25 を使用しています。
これら 2 つのバージョンに関する問題、またはこれを引き起こしている可能性のある何かを知っている人はいますか?
編集: 興味深いのは、bundle exec pumactl start で puma を起動すると、まったく異なるエラーが表示されることです。
[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked host:
しかし、私のホストは、development.rb ファイルで定義されています。実際、次のコードを追加したので、ホストはブロックされません。
config.hosts << /.*\.ngrok\.io/
config.hosts.clear
最後に、Rails を使用して puma を起動した場合はすべて問題ありませんが、sidekiq ワーカーだけが正しく実行されません。
解決策
Rails の使用を開始したいと考えており、ある日、次のコマンドを実行する必要があるという一般的なインストール手順に従ったとしましょう。
gem install rails
そして、次の出力が得られます。
...
Successfully installed rails-7.0.1
また、puma と Sidekiq の使用を開始し、pumactl start と Sidekiq を実行する際に便利なようにこれらの gem をインストールします。
gem install puma
...
Successfully installed puma-5.6.2
gem install sidekiq
...
Successfully installed sidekiq-6.4.2
次に、1 日、1 週間、または 1 か月かけていじくり回した後、新しい Rails アプリを作成します。
rails new app
Sidekiq を使用したいので、それを Gemfile に追加します。これは次のようになります。
# frozen_string_literal: true
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem "puma", "~> 5.6.2"
gem "rails", "~> 7.0.1"
gem "sidekiq", "~> 6.0"
ただし、これらの gem には新しいバージョンがあることがわかっているため、Gemfile を次のように更新します。
# frozen_string_literal: true
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem "puma", "~> 6.0.0"
gem "rails", "~> 7.0.4"
gem "sidekiq", "~> 7.0"
次に、bundle install と gems update を実行します。あるいは、バージョンを変更せずに、いつか ~> バージョン管理演算子を使用して gem を新しいバージョンに更新するバンドル更新を実行するかもしれません。
ここで、互換性の問題が発生し始めます。
最初の問題:
新しいバージョンの gem で古いバージョンの CLI を使用して puma を管理しようとすると、動作が保証されず、特定が難しい問題が発生する可能性があります。同じことが、Rails と Sidekiq gem、および CLI を備えたすべての gem にも当てはまります。
2番目の問題:
Bundle exec を使用せずにバンドルされたアプリケーションを実行しようとすると、特定が難しい問題が発生する可能性があります。 CLI ツールを備えたすべての gem についても同じことが当てはまります。
短い答え
Bundle exec Rails Server、bundle exec puma、bundle exec sidekiq のいずれであっても、アプリ内で gem CLI を実行するには、常に Bundle exec … を使用します。これにより、グローバル バージョンではなくバンドルされた gem を使用してアプリが起動または管理されるようになります。
Bundle exec … を使用してアプリを起動するときにエラーが表示された場合は、対処する必要がある実際の問題を示しているため、注意してください。同様に、bundle exec でエラーが表示されるが、グローバルにインストールされた gem を使用してアプリを起動するときにエラーが表示されない場合は、アプリが移植性がないことを意味するため、エラーに注意してください。アプリが実行され、アプリが別のコンピューターで実行されないことを確認します。
拡張回答
あなたが報告しているエラーは、システムとアプリの設定ミスが原因であるため、これ以上詳しい回答はできません。まず構成を修正し、発生している 3 つの異なるエラーのうちどれが有効であるかを判断する必要があります。