diff options
author | Cody Cutrer <cody@cutrer.us> | 2016-08-31 09:28:44 -0600 |
---|---|---|
committer | Cody Cutrer <cody@instructure.com> | 2017-07-17 13:46:44 -0600 |
commit | ed44b145bd6d621cd19a4a3c94eff1311e9c3755 (patch) | |
tree | 652eb7df106e28b88f1e42863890ca085c5ed417 /railties/lib/rails/commands | |
parent | c24be369322b9e0211fcef30003375de195ef660 (diff) | |
download | rails-ed44b145bd6d621cd19a4a3c94eff1311e9c3755.tar.gz rails-ed44b145bd6d621cd19a4a3c94eff1311e9c3755.tar.bz2 rails-ed44b145bd6d621cd19a4a3c94eff1311e9c3755.zip |
support `-` as an argument to `rails runner`
in Rails 4.0, you could use `/dev/stdin` on both Linux and Mac, but with
the switch to Kernel.load in Rails 4.1, this broke on Linux (you get
a LoadError). Instead, explicitly detect `-` as meaning stdin, then
read from stdin explicitly, instead of performing file gymnastics. This
should now work on any platform uniformly.
Passing a script via stdin is useful when you're sshing to a server,
and the script you want to run is stored locally. You could theoretically
pass the entire script on the command line, but in reality you'll run
into problems with the command being too long.
Diffstat (limited to 'railties/lib/rails/commands')
-rw-r--r-- | railties/lib/rails/commands/runner/USAGE | 3 | ||||
-rw-r--r-- | railties/lib/rails/commands/runner/runner_command.rb | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/railties/lib/rails/commands/runner/USAGE b/railties/lib/rails/commands/runner/USAGE index b2a6e8493d..24b60037f0 100644 --- a/railties/lib/rails/commands/runner/USAGE +++ b/railties/lib/rails/commands/runner/USAGE @@ -8,6 +8,9 @@ Run the Ruby file located at `path/to/filename.rb` after loading the app: <%= executable %> path/to/filename.rb +Run the Ruby script read from stdin after loading the app: + <%= executable %> - + <% unless Gem.win_platform? %> You can also use the runner command as a shebang line for your executables: diff --git a/railties/lib/rails/commands/runner/runner_command.rb b/railties/lib/rails/commands/runner/runner_command.rb index 6864a9726b..c931fc2152 100644 --- a/railties/lib/rails/commands/runner/runner_command.rb +++ b/railties/lib/rails/commands/runner/runner_command.rb @@ -13,7 +13,7 @@ module Rails end def self.banner(*) - "#{super} [<'Some.ruby(code)'> | <filename.rb>]" + "#{super} [<'Some.ruby(code)'> | <filename.rb> | -]" end def perform(code_or_file = nil, *command_argv) @@ -29,7 +29,9 @@ module Rails ARGV.replace(command_argv) - if File.exist?(code_or_file) + if code_or_file == "-" + eval($stdin.read, binding, "stdin") + elsif File.exist?(code_or_file) $0 = code_or_file Kernel.load code_or_file else |