2012-04-05 83 views

回答

0

经进一步调查,我能够挖掘到rails命令本身并基于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 
+0

您还可以通过测试脚本/服务器以及脚本/轨道来添加Rails 2兼容性。 – 2012-04-06 22:32:42

1

没有特定于Rails的文件或目录。所以你不能真正知道你是否在rails目录中。

更好的解决方案可以是知道您的Gemfile中是否有轨道或功能gem依赖项。

bundle list | grep 'rail' 
4

我知道你已经有一个解决方案红宝石,但这里有一个用bash写的,应该快一点。

假设你正在使用捆扎机:

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

这是段做什么:

  1. 的grep的Gemfile中为 '轨道' 的当前目录。放弃grep的输出。
  2. 如果grep的退出,退出代码为0,你在Rails项目

grep 'rails' 'Gemfile'将返回2的状态代码,如果一个名为“的Gemfile”文件没有在当前目录中是。如果找到'Gemfile'但它不包含'rails',grep将返回状态码1。

对于梁2不捆扎机这应该工作:

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

所有这一切确实是测试如果脚本/导轨文件存在。

我希望这可以帮助那些希望做到bash而不是ruby的人。

相关问题