Skip to content

binstubs sallowing unrealted LoadError #368

Open
@chancancode

Description

@chancancode

Today I ran into a problem that I had a LoadError somewhere in my Rails app. When I ran bin/rails server, this is what happened:

% bin/rails s
=> Booting WEBrick
=> Rails 4.2.0.rc1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
bin/rails:6: warning: already initialized constant APP_PATH
/private/tmp/loaderror/bin/rails:6: warning: previous definition of APP_PATH was here
Usage: rails COMMAND [ARGS]

The most common rails commands are:
 generate    Generate new code (short-cut alias: "g")
 console     Start the Rails console (short-cut alias: "c")
 server      Start the Rails server (short-cut alias: "s")
 dbconsole   Start a console for the database specified in config/database.yml
             (short-cut alias: "db")
 new         Create a new Rails application. "rails new my_app" creates a
             new application called MyApp in "./my_app"

In addition to those, there are:
 destroy      Undo code generated with "generate" (short-cut alias: "d")
 plugin new   Generates skeleton for developing a Rails plugin
 runner       Run a piece of code in the application environment (short-cut alias: "r")

All commands can be run with -h (or --help) for more information.
%

As you can see, it attempted to start the server, then silently failed, then followed up with some unrelated warnings, and finally a help message from the raw rails command complaining that I didn't pass any arguments.

If you would like to play along, I pushed a sample application on github.

The reason is that we have a line in the rails binstub that swallowed all LoadError. Since this error didn't originate from loading spring like the binstub assumed, it is unsafe to continue execution in this case because the Rails environment was already loaded, ARGV poped, ...

Not sure what's the best fix. Perhaps we can rescue the LoadError within the spring binstub and raise a SpringNotInstalled error, then rescue only that in the rails binstub?

I think there are a few issues on the tracker that was caused by this, but it's hard to tell for sure...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions