【问题标题】:Test if the current directory is inside a Rails project (bash)测试当前目录是否在 Rails 项目中(bash)
【发布时间】:2012-04-05 06:25:09
【问题描述】:

有没有一种简单的方法可以测试当前目录是否在 Rails 项目中?显然,Rails 本身对此进行了测试,以便使用 rails 子命令(generate、scaffold 等),因此可能有一种直接的方法来测试它。

我正在寻找类似于test if you're inside a Git repo 的东西。

【问题讨论】:

    标签: ruby-on-rails bash


    【解决方案1】:

    我知道你已经有了 ruby​​ 的解决方案,但这里有一个用 bash 编写的,应该会快一些。

    假设您使用的是 Bundler:

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

    这就是 sn-p 所做的:

    1. grep 当前目录中的 Gemfile 以获取“rails”。丢弃 grep 的输出。
    2. 如果 grep 以退出代码 0 退出,则您在 Rails 项目中

    如果当前目录中不存在名为“Gemfile”的文件,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 而不是 ruby​​ 的人有所帮助。

    【讨论】:

      【解决方案2】:

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

      更好的解决方案是了解您的 Gemfile 中是否有 rails 或 railities gem 依赖项。

      bundle list | grep 'rail'
      

      【讨论】:

        【解决方案3】:

        经过进一步调查,我能够深入研究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
        

        【讨论】:

        • 您还可以通过测试script/serverscript/rails 来添加Rails 2 兼容性。
        猜你喜欢
        • 2020-10-14
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 2014-12-30
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多