使用 fork 在 rails 目录和现有 rails 进程(如控制台)中启动 sidekiq 有什么区别

What's the difference between starting sidekiq inside rails directory and within an existing rails process (like console) using fork

$ rails console

[1] pry(main)> fork { exec "bundle exec sidekiq -c 3 crawling_jobs -t 1 -L log/sidekiq.log" }
=> 7306

bundler: failed to load command: sidekiq (/Users/raducroitoru/.rbenv/versions/2.5.3/bin/sidekiq)
LoadError: cannot load such file -- selenium-webdriver

相同的命令在项目目录中有效。

对我来说,这似乎是 bin PATH 问题,但我找不到与此相关的任何主题。感谢任何帮助。

Ruby:2.5.3,Rails:4.2.11.1,Sidekiq:5.2.7(ent:1.8.1)

本质上,分叉进程很可能不会继承与您的 运行 控制台相同的环境,因此捆绑程序不会加载正确的 gems(因此它找不到 selenium-webdriver ) - 你 可能 通过在命令中添加 rails env var 来修复它,例如

fork { exec "RAILS_ENV=#{Rails.env} bundle exec sidekiq -c 3 crawling_jobs -t 1 -L log/sidekiq.log" 

我说 "might" 因为您的控制台环境 (Rails.env) 可能也没有用于 selenium-webdriver 的 gem 组。

尽管您的问题与从控制台启动有关,但您是否需要从现有 rails 进程而不是 shell 执行此操作?