Как запустить ruby ​​script в контексте соединителя?

У меня есть Ruby script, называемый foo.rb, и я хочу запустить его в контексте среды bundler. Как?

bundle exec foo.rb не работает, потому что exec ожидает оболочку script.

Ответ 1

Передайте имя script команде ruby:

bundle exec ruby script_name

Если вам нужна среда Rails:

bundle exec rails runner script_name

Ответ 2

Например, я хотел использовать ту же версию Rubocop, что и приложение Rails, а не самую последнюю систему, поэтому сделаем это в script:

require 'bundler'
Bundler.require

# ...

Разрешено использовать мою версию приложения rubocop.

Ответ 3

Вы можете просто сделать его script - добавить

#!/usr/bin/env ruby

в начало файла и сделать его исполняемым. Тогда bundle exec foo.rb будет работать как ожидалось.

(Это относится к unix или OSX - не уверен в Windows)

См. http://bundler.io/v1.15/man/bundle-exec.1.html#Loading

Также см. https://coderwall.com/p/kfyzcw/execute-ruby-scripts-directly-without-bundler-exec для запуска сценариев ruby ​​с включенными зависимостями без необходимости bundle exec