有人可以解释以下命令之间的区别吗?
rake assets:precompile
bin/rake assets:precompile
RAILS_ENV=production rake assets:precompile
RAILS_ENV=production bin/rake assets:precompile
答案 0 :(得分:4)
rake
和bin/rake
都是可执行的Ruby文件,用于引导Rake gem。 rake
是您的环境对Rake gem的默认调用,并且是在安装Rake时由RubyGems创建的。它应该存在于你的路径中的某个地方:
[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
习惯,我从未见过任何破坏,但是自从Rails指南明确表明这一点后,开始使用bin/rake
可能是一个好主意。
最后,RAILS_ENV
用于设置rake
或bin/rake
的特定执行应使用的Rails环境(开发,测试或生产)。
答案 1 :(得分: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
部分用于指定运行rake
命令时Rails应加载的环境。默认情况下,环境为development
。
总结:
rake assets:precompile
:使用别名/快捷方式rake
/bin/rake assets:precompile
:使用rake
计划RAILS_ENV=production rake assets:precompile
:指定Rails在执行rake任务时加载production
环境assets:precompile