有没有一种简单的方法来测试当前目录是否在rails项目中?很明显,Rails本身测试这个是为了使用rails子命令(generate,scaffold等),所以可能有一种直接的方法来测试它。
我正在寻找类似于test if you're inside a Git repo的方式。
答案 0 :(得分:4)
我知道你已经在ruby中有了一个解决方案,但这里有一个用bash写的,应该会快一点。
假设你正在使用Bundler:
grep 'rails' 'Gemfile' >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "It's a Rails project!"
fi
这就是该片段的作用:
grep 'rails' 'Gemfile'
将返回状态代码2。 grep
如果找到'Gemfile'但它不包含'rails',将返回状态代码1。
对于没有Bundler的Rails 2,这应该可以工作:
if [ -f script/rails ]; then
echo "It's a Rails 2 project!"
fi
所有这一切都是测试脚本/ rails文件是否存在。
我希望这可以帮助那些希望用bash代替红宝石的人。
答案 1 :(得分:1)
没有特定于Rails的文件或目录。所以你无法真正知道你是否在rails目录中。
更好的解决方案是知道你的Gemfile中是否有rails或railities gem依赖项。
bundle list | grep 'rail'
答案 2 :(得分:0)
经过进一步调查,我能够深入了解rails
命令本身并基于railties
gem(<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