Rails控制台无法在服务器上运行

当我在Capistrano部署的Current文件夹中的服务器上通过SSH运行bundle exec rails console productionrails console production ,我得到:

 Usage: rails new APP_PATH [options] Options: (...) 

解释开始一个新的应用程序。 在当地它的工作原理。 为什么我不能远程启动控制台?

我假设您从版本3更新到rails 4 ,并且您的应用程序无法在bin目录中找到可执行文件。 运行此命令以查看您的rails版本:

 $ rails -v 

如果你的rails版本是4或更高,请尝试运行:

 $ rake rails:update:bin 

来源: Rails 4发行说明

6.1值得注意的变化

  • 您的应用程序的可执行文件现在位于bin/ dir中。 运行rake rails:update:bin来获取bin/bundlebin/railsbin/rake

我正在使用capistrano进行部署,包括capistrano / bundler gem。 由于./ bin目录在Rails 4中受版本控制,我们需要阻止Capistrano通过从set :linked_dirs删除bin来在部署中链接它。

现在为了防止bundler覆盖版本控制的binstubs,我们可以添加行set :bundle_binstubs, nil ,这将阻止capistrano-bundler在运行bundle install时设置–binstubs选项。

我的config / deploy.rb文件现在有这些行:

 # 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 

请注意:linked_dirs行中缺少bin目录。

我有同样的问题,当你通过cap deploy shared/bin部署symlink到current/bin

这对我有用:

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

这应该有所帮助,但它有点是一个临时的解决方案,我试图找出如何使cap不自动符号化current / bin。

如果是Rails 5.2

我不得不通过在项目根目录中运行以下命令来删除bin目录。

  rm -rf bin 

然后我在项目根目录中运行另一个命令:

  rake app:update:bin 

它会显示如下输出:

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

而已。

这已经有一段时间了,因为这回答了。

在我的情况下,我需要运行:

 rake app:update:bin 

注意 – app而不是rails。

我在Rails 5.1应用程序中错过了bin目录