web-dev-qa-db-ja.com

起動できませんRails 4本番サーバーのコンソール

奇妙な問題があり、助けが必要です。

Railsコンソールを起動しようとしていますが、Rails cコマンドが存在しないように動作しています。

FWIW、私は4年前からRails開発者であり、他の多数のサーバーで問題なくこれを常に行っています。このサーバーでは、データベースをドロップ、作成、移行、シードできます問題なく(Rails_ENV = productionを使用)、アプリは問題なくライブで問題なく動作します。

設定:

Ubuntu 14.04(racksapce第2世代パフォーマンス1サーバー)
Nginx with Passenger(私は通常、Unicornを使用していますが、Passengerで展開したアプリで問題が発生したことはありません)
Ruby 2.1.5(rvmを使用)
レール4.1.7
Postgres
Capistrano 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?)

繰り返しますが、Unicornの新旧バージョンとPassengerのほとんどは古いバージョンの両方でデプロイされたnginx/Apacheの両方で何百もの本番コンソールにログインしました。

これは私がこれまでにこのメッセージを受け取ったのは初めてであり、コンソールは壊れているように見える唯一のものです-それ以外はすべて正常に動作します!アプリはライブで動作します。

私が最初に提案することは知っていますが、Railsアプリディレクトリからのcプロダクション-少なくとも10回は正しいディレクトリにcdし、手動で正しいものをロードしました。宝石セット、これは問題ではありません。

開発では正常に機能するが、本番では機能しない理由がわかりません。以前はスクリプトディレクトリがあったことを知っています(たぶんRails 2?)-)Rails thatのスクリプトコマンドを含むディレクトリはまだありますか?破損している可能性がありますか?

誰かがこれまでにこれを経験したり、何か提案がありますか?

何かが足りないような気がします。

36
johndavid400

わかりました、問題を見つけました... @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を見たことはありませんでした。ビンがシンボリックリンクされる必要がある理由が本当にわからない...それはデフォルトのRailsファイルしかなく、なぜそれらがソース管理から削除される必要があるのか​​考えられないが、おそらくカピストラーノチームには理由があります。

これが誰かを助けることを願っています。

66
johndavid400

これらのファイルがあるかどうかを確認し、それらを削除してみてください。

  • script/Rails
  • bin/Rails
2
stoodfarback