5

現在のディレクトリがRailsプロジェクト内にあるかどうかをテストする簡単な方法はありますか?明らかに、Rails自体がrailsサブコマンド(生成、scaffoldなど)を使用するためにこれをテストするので、おそらくこれをテストする簡単な方法があります。

Gitリポジトリ内にいるかどうかをテストする方法に似たものを探しています。

4

3 に答える 3

5

あなたはすでにrubyで解決策を持っていることを知っていますが、これはbashで書かれたもので、もう少し速いはずです。

Bundlerを使用していると仮定します。

grep 'rails' 'Gemfile' >/dev/null 2>&1
if [ $? -eq 0 ]; then
  echo "It's a Rails project!"
fi

これは、そのスニペットが行うことです。

  1. 'rails'の現在のディレクトリにあるGemfileをgrepします。grepの出力を破棄します。
  2. grepが終了コード0で終了する場合は、Railsプロジェクトに参加しています

grep 'rails' 'Gemfile''Gemfile'という名前のファイルが現在のディレクトリに存在しない場合、ステータスコード2を返します。grep'Gemfile'が見つかったが、'rails'が含まれていない場合、ステータスコード1を返します。

BundlerのないRails2の場合、これは機能するはずです。

if [ -f script/rails ]; then
  echo "It's a Rails 2 project!"
fi

スクリプト/railsファイルが存在するかどうかをテストするだけです。

これが、ルビーの代わりにバッシュをしたいと思っている人に役立つことを願っています。

于 2013-09-29T23:25:42.443 に答える
1

Railsに固有のファイルやディレクトリはありません。そのため、Railsディレクトリにいるかどうかを実際に知ることはできません。

より良い解決策は、Gemfileにrailsまたはrailitiesgemの依存関係があるかどうかを知ることです。

bundle list | grep 'rail'
于 2012-04-05T07:57:59.073 に答える
0

さらに調査したところ、コマンド自体を掘り下げて、 gemrailsの一部に基づいて解決策を見つけることができました( ):railties<railties>/lib/rails/script_rails_loader.rb

#!/usr/bin/env ruby

require 'pathname'

SCRIPT_RAILS = File.join('script', 'rails')

def self.in_rails_application?
  File.exists?(SCRIPT_RAILS)
end

def self.in_rails_application_subdirectory?(path = Pathname.new(Dir.pwd))
  File.exists?(File.join(path, SCRIPT_RAILS)) || !path.root? && in_rails_application_subdirectory?(path.parent)
end

if in_rails_application? || in_rails_application_subdirectory?
  exit(0)
else
  exit(1)
end
于 2012-04-06T22:28:12.363 に答える