rake 和 bin/rake 的区别
Posted
技术标签:
【中文标题】rake 和 bin/rake 的区别【英文标题】:Difference between rake and bin/rake 【发布时间】:2014-09-04 14:33:35 【问题描述】:谁能解释以下命令之间的区别?
rake assets:precompile
bin/rake assets:precompile
RAILS_ENV=production rake assets:precompile
RAILS_ENV=production bin/rake assets:precompile
【问题讨论】:
一个明确地在 bin 中运行 rake。一个没有。两个将环境设置为生产环境,另外两个不设置(例如,使用默认开发环境)。 “以二进制运行 rake”是什么意思? 什么都没有;我说“在 bin 中运行耙子”。bin
是(假定是)当前目录中的子目录。对bin/rake
的调用显式运行bin
目录中包含的rake 命令。调用rake
运行 rake 命令,无论它在哪里,或者在哪里。
【参考方案1】:
rake
和 bin/rake
都是用于引导 Rake gem 的可执行 Ruby 文件。 rake
是您的环境对 Rake gem 的默认调用,它是在您安装 Rake 时由 RubyGems 创建的。它应该位于您的 PATH 中的某个位置:
[jkrause:~] $ which rake
/usr/bin/rake
或者,如果您使用的是 RVM 等版本管理器(您应该这样做):
[jkrause:~] $ which rake
/Users/jkrause/.rvm/rubies/ruby-2.2.0/bin/rake
另一方面,bin/rake
是在您创建新的 Rails 应用程序时由 Rails 创建的,位于 Rails 应用根目录下的 bin
目录中:
[jkrause:~] $ ls -la ~/src/my_rails_app/bin/rake
-rwxr-xr-x 1 jkrause staff 164 Jan 5 14:11 bin/rake
在旧版本的 Rails(3.x 和更早版本)中,bin/rake
不存在,因此标准做法是调用 RubyGems 安装的默认 rake
。在 Rails 4.x 中,您需要调用 bin/rake
,因为 Rails 需要在您调用 Rake 之前更改环境并加载一些辅助 gem。老实说,我仍然出于习惯不时执行rake
,而且我从未见过有任何问题,但开始使用bin/rake
可能是个好主意,因为Rails 指南明确表明了这一点。
最后,RAILS_ENV
用于设置rake
或bin/rake
的特定执行应该使用哪个Rails 环境(开发、测试或生产)。
【讨论】:
【参考方案2】:rake
和 bin/rake
Rake 是您安装在计算机上的程序。要在终端中使用它,请使用rake do:something
。直接使用rake
意味着已经创建了一个快捷方式,别名是“当我输入rake
我想使用位于[...] 中的程序”。
bin/rake
样式不是使用创建的别名而是使用程序的路径。通常程序的执行器(不是程序的内容,只是启动器)位于文件夹/bin/
。要确定特定程序的完整路径,请使用which
:
[yoshiji:~] $ which rake
/home/yoshiji/.rvm/gems/ruby-1.9.3-head@yourproject/bin/rake
[yoshiji:~] $ which ls
/bin/ls
RAILS_ENV=production rake do:something
RAILS_ENV
部分用于指定 Rails 在运行 rake
命令时应加载的环境。默认环境为development
。
总结一下:
rake assets:precompile
:使用别名/快捷方式 rake
/bin/rake assets:precompile
:使用rake
程序的完整路径
RAILS_ENV=production rake assets:precompile
:指定 Rails 在执行 rake 任务时加载 production
环境 assets:precompile
【讨论】:
所以rake
和bin/rake
的行为完全一样?唯一的区别是明确程度?
除非您定义了一个快捷方式rake
来执行其他操作,以启动位于bin/rake
的程序,是的,它们的行为相同。唯一的区别是一个使用快捷方式,而另一个使用完整路径。
如果您能解释在哪里可以找到别名,那就太好了。我在 .bash_profile 和 .bashrc 中都没有。我错过了什么?以上是关于rake 和 bin/rake 的区别的主要内容,如果未能解决你的问题,请参考以下文章
在 Heroku 上执行 rake db:migrate 时出错
CH2 Hartl 教程迁移正在等待。要解决此问题,请运行: bin/rake db:migrate RAILS_ENV=development