Ada*_*arp 5 bash ruby-on-rails
有没有一种简单的方法来测试当前目录是否在 rails 项目中?显然,Rails 本身会对此进行测试,以便使用 rails 子命令(generate、scaffold 等),因此大概有一种直接的方法来测试它。
如果您在 Git repo 中,我正在寻找类似于您将如何测试的东西。
小智 5
我知道您已经在 ruby 中找到了解决方案,但这里有一个用 bash 编写的解决方案,应该会快一点。
假设您正在使用 Bundler:
grep 'rails' 'Gemfile' >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "It's a Rails project!"
fi
Run Code Online (Sandbox Code Playgroud)
这就是该片段的作用:
grep 'rails' 'Gemfile'如果当前目录中不存在名为“Gemfile”的文件,则将返回状态代码 2。grep如果找到“Gemfile”但不包含“rails”,则将返回状态代码 1。
对于没有 Bundler 的 Rails 2,这应该有效:
if [ -f script/rails ]; then
echo "It's a Rails 2 project!"
fi
Run Code Online (Sandbox Code Playgroud)
所做的只是测试脚本/rails 文件是否存在。
我希望这可以帮助那些希望使用 bash 而不是 ruby 的人。
经过进一步调查,我能够深入研究rails命令本身并基于railtiesgem ( <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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |