Лучший способ добавить binstub утилиты CLI в приложение Rails

У меня есть интерфейс командной строки на основе tor, который поставляется с приложением Rails, и среди множества примеров использования tor для реализации интерфейса командной строки я не нашел примеров простого binstub, который выполнялся бы в контексте компоновщика.

Я хочу иметь возможность звонить my_cli из командной строки вот так:

$ my_cli do something

Я не хочу:

$ BUNDLE_GEMFILE=/path/to/Gemfile/of/Rails/app bundle exec my_cli

И я НЕ хочу:

$ thor do something

Следующий binstub работает. Я должен требовать ../config/boot, требующий 'thor/rails' в my_cli.rb недостаточно.

Я спрашиваю, есть ли лучший способ сделать это?

#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require_relative '../lib/my_cli'
MyCli.start(ARGV)

2 ответа

Немного чище:

#!/usr/bin/env ruby

ENV['BUNDLE_GEMFILE'] = File.absolute_path(File.join(__dir__, '../Gemfile'))
ENV['RAKEOPT'] = "--silent"
ENV['RAILS_ENV'] ||= 'development'

APP_PATH = File.absolute_path(File.join(__dir__, '../config/application.rb'))

require 'rubygems'
require 'bundler/setup'
require_relative '../config/environment'

require 'my_cli'

MyCli.start(ARGV)

Кажется, это работает нормально:

#!/usr/bin/env ruby

ENV['BUNDLE_GEMFILE'] = '/opt/myRailsApp/Gemfile'
ENV['RAKEOPT'] = "--silent"
ENV['RAILS_ENV'] ||= 'production'

APP_PATH = '/opt/myRailsApp/config/application'

require 'rubygems'
require 'bundler/setup'
require '/opt/myRailsApp/config/environment.rb'
require '/opt/myRailsApp/lib/my_cli'

MyCli.start(ARGV)
Другие вопросы по тегам