現在のディレクトリがRailsプロジェクト内にあるかどうかをテストする簡単な方法はありますか?明らかに、Rails自体がrailsサブコマンド(生成、scaffoldなど)を使用するためにこれをテストするので、おそらくこれをテストする簡単な方法があります。
Gitリポジトリ内にいるかどうかをテストする方法に似たものを探しています。
現在のディレクトリがRailsプロジェクト内にあるかどうかをテストする簡単な方法はありますか?明らかに、Rails自体がrailsサブコマンド(生成、scaffoldなど)を使用するためにこれをテストするので、おそらくこれをテストする簡単な方法があります。
Gitリポジトリ内にいるかどうかをテストする方法に似たものを探しています。
あなたはすでにrubyで解決策を持っていることを知っていますが、これはbashで書かれたもので、もう少し速いはずです。
Bundlerを使用していると仮定します。
grep 'rails' 'Gemfile' >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "It's a Rails project!"
fi
これは、そのスニペットが行うことです。
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ファイルが存在するかどうかをテストするだけです。
これが、ルビーの代わりにバッシュをしたいと思っている人に役立つことを願っています。
Railsに固有のファイルやディレクトリはありません。そのため、Railsディレクトリにいるかどうかを実際に知ることはできません。
より良い解決策は、Gemfileにrailsまたはrailitiesgemの依存関係があるかどうかを知ることです。
bundle list | grep 'rail'
さらに調査したところ、コマンド自体を掘り下げて、 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