Rails console not working on server

2019-02-04 08:11发布

问题:

When I run bundle exec rails console production or rails console production via SSH on the server in the Current folder of the Capistrano deploy I get:

Usage:
     rails new APP_PATH [options]

Options:
    (...)

with an explanation to start a new app. Locally it works. Why can't I start a console remotely?

回答1:

I'm assuming that you updated to rails 4 from version 3 and your app can't find the executables in the bin directory. Run this to see your rails version:

$ rails -v

If your rails version is 4 or above, try running this:

$ rake rails:update:bin

Source: Rails 4 Release Notes

6.1 Notable changes

  • Your app's executables now live in the bin/ dir. Run rake rails:update:bin to get bin/bundle, bin/rails, and bin/rake.


回答2:

I am using capistrano to deploy, including the capistrano/bundler gem. Since the ./bin directory is version controlled in Rails 4, we need to prevent Capistrano from linking it on deployments by removing bin from set :linked_dirs.

Now in order to prevent bundler from overwriting the version controlled binstubs, we can add the line set :bundle_binstubs, nil which will prevent capistrano-bundler from setting the --binstubs option when running bundle install.

My config/deploy.rb file now has these lines:

# Default value for linked_dirs is []
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')

set :bundle_binstubs, nil

Note the lack of the bin directory in the :linked_dirs line.



回答3:

I have the same problem, and turns out when you deploy through cap shared/bin is symlink to current/bin.

Here's what works for me:

  • rm current/bin
  • mkdir current/bin
  • rake rails:update:bin

This should help, but it is somewhat a temporary solution, I'm trying to find out how to make cap not auto symlink-ing current/bin.



回答4:

In case of Rails 5.2

I had to remove bin directory by running below command in project root directory.

 rm -rf bin

and then I ran another command in project root directory:

 rake app:update:bin

It will show you output like below:

  create  bin
  create  bin/bundle
  create  bin/rails
  create  bin/rake
  create  bin/setup
  create  bin/update
  create  bin/yarn

That's it.



回答5:

It's been a little while since this was answered.

In my case I needed to run:

rake app:update:bin

Note- app rather than rails.

I was missing the bin directory all-together in my Rails 5.1 App