joh*_*400 36 ruby console production ruby-on-rails ruby-on-rails-4
有一个奇怪的问题,需要帮助.
我正在尝试在生产服务器上启动rails控制台,它的行为类似于rails c命令不存在.
FWIW,我已经成为一名铁路开发人员已有4年,并且一直在很多其他服务器上这样做而没有问题.在这台服务器上,我可以毫无问题地删除,创建,迁移,播种数据库(使用RAILS_ENV =生产),并且应用程序可以正常运行而不会出现任何问题.
建立:
Ubuntu 14.04(racksapce第二代性能1服务器)
Nginx with Passenger(我通常使用Unicorn,但从未在我使用Passenger部署的任何应用程序上遇到过问题)
Ruby 2.1.5(使用rvm)
Rails 4.1.7
Postgres
Capistrano 3(使用rvm,迁移,资产预编译等扩展)
我尝试过的:
进入app目录:
cd /home/deployer/app_name/current
Run Code Online (Sandbox Code Playgroud)
哪个加载.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
Run Code Online (Sandbox Code Playgroud)
每次,我都会收到一条暗示'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?)
Run Code Online (Sandbox Code Playgroud)
同样,我已经在nginx/apache上登录了数百个生产控制台,这些控制台部署了Unicorn的旧版本和新版本以及大多数旧版本的Passenger.
这是我第一次收到这条消息,而控制台是唯一似乎被打破的东西 - 其他一切正常!该应用程序是实时的,工作得很好.
我知道首先要建议的是我没有从app目录运行rails c production - 我已经cd到正确的目录中至少10次并手动加载了正确的gemset,这不是问题.
无法弄清楚为什么它在开发中工作得很好,但在生产中却没有.我知道曾经有一个脚本目录(可能是rails 2?) - 是否还有一个包含可能已损坏的rails的脚本命令的目录?
有没有人曾经经历过这个或有任何建议?
我觉得我错过了什么.
joh*_*400 65
好的,发现问题... @stoodfarback非常接近,但我认为需要为可能遇到同样事情的其他人提及问题的原因.
基本上我使用的是比我过去使用的更新版本的Capistrano(3.3.5),它(默认情况下)将'bin'添加到每个部署上符号链接的共享目录列表中.
set :linked_dirs, fetch(:linked_dirs, []).push('bin', 'log', 'tmp', 'public/system', "public/downloads", "public/assets")
Run Code Online (Sandbox Code Playgroud)
因此,部署脚本在共享的bin中创建了一个新目录(它是空的),并且缺少用于启动rails服务器和控制台的文件.它们显然仍处于开发阶段,因此它只会影响生产.
从linked_dirs列表中删除了'bin',现在一切都按预期工作了.
现在看起来像:
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp', 'public/system', "public/downloads","publ ic/assets")
Run Code Online (Sandbox Code Playgroud)
我已经注意到我使用的最后几个版本的Capistrano,linked_dirs的格式和默认值一直在变化,但我从未在列表中看到过bin.不确定为什么bin需要符号链接...它只有默认的rails文件,我想不出为什么需要从源代码控制中删除它们,但也许Capistrano团队有理由.
希望这有助于某人.