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

时间:2015-01-30 19:14:50

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

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

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

FWIW,我已经成为一名铁路开发人员已经4年了,并且在很多其他服务器上一直这样做而没有问题。在这台服务器上,我可以毫无问题地删除,创建,迁移,播种数据库(使用RAILS_ENV =生产),并且应用程序可以正常运行而不会出现任何问题。

设定:

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

我尝试过的事情:

进入app目录:

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的脚本命令?

有没有人曾经见过这个或有任何建议?

我觉得我错过了什么。

2 个答案:

答案 0 :(得分:65)

好的,发现问题...... @stoodfarback非常接近,但我认为需要为可能遇到同样事情的其他人提及问题的原因。

基本上我使用的是较新版本的Capistrano(3.3.5),而不是我过去使用的版本(默认情况下)添加' bin'到每个部署时符号链接的共享目录列表。

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

因此,部署脚本在共享的bin中创建了一个新目录(它是空的),并且缺少用于启动rails服务器和控制台的文件。它们显然仍处于开发阶段,因此只会影响生产。

删除' bin'来自linked_dirs列表,现在一切都按预期工作。

现在看起来像:

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

我注意到我使用的Capistrano的最后几个版本,linked_dirs的格式和默认值一直在变化,但我从未见过该列表中的bin。不确定为什么bin需要符号链接...它只有默认的rails文件,我不能想到为什么需要从源代码控制中删除它们,但是Capistrano团队可能有理由。 / p>

希望这有助于某人。

答案 1 :(得分:2)

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

  • script/rails
  • bin/rails