无法在生产服务器上启动 rails 4 控制台

Cannot start rails 4 console on production server

遇到奇怪的问题,需要帮助。

我正在尝试在生产服务器上启动 rails 控制台,但它的表现就像 rails c 命令不存在一样。

FWIW,我已经成为 rails 开发人员 4 年了,并且一直在大量其他服务器上毫无问题地这样做。在此服务器上,我可以毫无问题地删除、创建、迁移、播种数据库(使用 RAILS_ENV=production),并且该应用程序可以正常运行,没有任何问题。

设置:

Ubuntu 14.04(racksapce 第二代性能 1 服务器)
Nginx with Passenger(我通常使用 Unicorn,但我用 Passenger 部署的任何应用程序都没有问题)
Ruby 2.1.5(使用 rvm)
Rails4.1.7
Postgres
Capist运行o 3(使用 rvm、迁移、资产预编译等扩展)

我试过的:

cd 进入应用程序目录:

cd /home/deployer/app_name/current

加载 .rvmrc 并显示我在正确的 gemset 中,运行 捆绑只是为了好玩。

rails c production # (which usually works no problem)

bundle exec rails c production # (sometimes have to do this on older apps that do not have the newer capistrano 3 and rvm setup)

rails c production RAILS_ENV=production # (getting desperate here)

RAILS_ENV=production rails c production # (haha, surely this won't work, but out of options)

RAILS_ENV=production bundle exec rails console

每次,我都会收到暗示 'rails c' 不是有效命令的通知:

Usage:
  rails new APP_PATH [options]

Options:
  -r, [--ruby=PATH]                                      # Path to the Ruby binary     of your choice

..... yada yada, shows the rest of the rails options (oddly enough does not show 'c' or 'console' as options?)

同样,我已经在 nginx/apache 上登录了数百个生产控制台,这些控制台部署了新旧版本的 Unicorn 和大多数旧版本的 Passenger。

这是我第一次收到此消息,控制台是唯一似乎坏掉的东西 - 其他一切正常!该应用程序已上线并且运行良好。

我知道首先要建议的是我不是 运行 rails 应用程序目录的 c 产品 - 我已经 cd 到正确的目录至少 10 次并且手动加载正确的 gemset,这不是问题。

无法弄清楚为什么它在开发中工作正常,但在生产中却不行。我知道前一段时间曾经有一个脚本目录(可能是 rails 2?)- 是否还有一个目录包含可能已损坏的 rails 的脚本命令?

有没有人以前遇到过这种情况或有什么建议?

感觉好像少了什么。

检查您是否有这些文件并尝试删除它们:

  • script/rails
  • bin/rails

好的,找到问题了...@stoodfarback 非常接近,但我认为需要为可能遇到相同问题的其他人提及问题的原因。

基本上,我使用的 Capistrano (3.3.5) 版本比我过去使用的版本更新,它(默认情况下)将 'bin' 添加到它在每次部署时符号链接的共享目录列表.

set :linked_dirs, fetch(:linked_dirs, []).push('bin', 'log', 'tmp', 'public/system', "public/downloads", "public/assets")

因此部署脚本在名为 bin 的共享目录中创建了一个新目录(该目录为空),用于启动 rails 服务器和控制台的文件丢失了。他们显然还在开发中,所以它只影响生产。

从 linked_dirs 列表中删除了 'bin',现在一切正常。

现在看起来像:

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp', 'public/system', "public/downloads","publ ic/assets")

我注意到在我使用的最近几个版本的 Capistrano 中,linked_dirs 的格式和默认值不断变化,但我从未在该列表中看到 bin。不太确定为什么 bin 需要符号链接......它只有默认的 rails 文件,我想不出为什么需要从源代码管理中删除它们,但也许 Capistrano 团队有理由.

希望这对某人有所帮助。