有一个奇怪的问题,需要帮助。
我正在尝试在生产服务器上启动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的脚本命令?
有没有人曾经见过这个或有任何建议?
我觉得我错过了什么。
答案 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