【问题标题】:Cannot start rails 4 console on production server无法在生产服务器上启动 rails 4 控制台
【发布时间】:2015-03-30 08:25:27
【问题描述】:

有一个奇怪的问题需要帮助。

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

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

设置:

Ubuntu 14.04(racksapce 第二代性能 1 服务器)
带乘客的 Nginx(我通常使用 Unicorn,但在我使用乘客部署的任何应用程序上都没有遇到过问题)
Ruby 2.1.5(使用 rvm)
Rails 4.1.7
Postgres
Capistrano 3(使用 rvm、迁移、资产预编译等扩展)

我的尝试:

cd 进入应用目录:

cd /home/deployer/app_name/current

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

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。

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

我知道要建议的第一件事是我没有从 app 目录运行 rails c production - 我已经 cd 到正确的目录至少 10 次并手动加载了正确的 gemset,这不是问题。

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

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

我觉得我错过了什么。

【问题讨论】:

  • 其他命令是否按预期工作? (rails server...) rails -v 告诉你什么?是4.1.7吗?
  • 不,rails s 和 rails server 都显示我上面描述的相同的“Usage:”消息。 rails -v 返回:Rails 4.1.7

标签: ruby-on-rails ruby ruby-on-rails-4 console production


【解决方案1】:

好的,找到了问题...@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 团队有一个原因。

希望这对某人有所帮助。

【讨论】:

  • 谢谢你,非常有帮助的解释!
  • 太棒了!谢谢。
  • 这个文件应该在哪里?我尝试搜索linkd_dirs,但没有任何结果。
  • @ChrisStryczynski :linked_dirs 行位于 Capistrano 在运行“cap install”命令时安装的 config/deploy.rb 文件中
【解决方案2】:

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

  • script/rails
  • bin/rails

【讨论】:

  • 没有脚本目录,bin目录为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2014-01-24
  • 1970-01-01
  • 2014-10-31
  • 2014-08-08
相关资源
最近更新 更多