How to use thor in rails?

Thor is a toolkit for building powerful command-line interfaces.

It always been used for single command line. If I want to use it in a rails project, for example:


require "thor"
class MyCLI < Thor
  desc "hello NAME", "say hello to NAME"
  def hello(name)
    puts "Hello #{name}"


Where to put the MyCLI.start(ARGV)?

If I put it under that file(lib/tasks/my_cli.rb), when I run my rspec test, it will show me the command message:

  rspec help [COMMAND]   # Describe available commands or one specific command
  rspec hello NAME       # say hello to NAME


I don’t want to see it in my bundle exec rspec, so I moved the MyCLI.start(ARGV) to bin/rails. It looks well. But after I do this:

$ ./bin/rails s -b
$ [CTRL+C]


I saw this message:

=> Booting Thin
=> Rails 4.2.0 application starting in development on
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on, CTRL+C to stop
^CStopping ...
Could not find command "_b".


What does it mean:

Could not find command "_b".


So, I don’t know a best practice about how to use thor in a rails project.

the lib/tasks directory is for Rake tasks, and anything in it that ends in .rake or .rb will be loaded up with the environment.

i suggest putting them in lib/thor/, or if you make them standalone thor scripts you can put them in scripts/

Thank you.

If I move my thor task to lib/thor directory, how can I use it? Also by rails runner? Then there has the same trouble.

Your second method is good for me. Now I am using Rails 4, I tried to make a thor script file under bin/ likes bin/thor.
But how to run the file under lib/tasks/my_cli.rb in that script?