2015-11-04 116 views
1

bundle exec rake db:migrate真的意味着什么?或者bundle exec rails我知道bundle处理我们在Gemfile中指定的所有gem,并且rake处理所有你可以通过脚本执行的事情,但是这些命令不会在没有前缀bundle exec的情况下执行,我找不到在互联网上的任何文件!在Ruby on Rails中使用bundle exec

回答

3

捆扎机 - 管理你的应用程序的依赖

在捆绑的上下文中运行命令,最好的办法

$束EXEC

Exec的运行命令,只要它能够访问在宝石束。当使用捆绑EXEC可以要求并调用绑定的宝石,好像他们是安装到系统级的RubyGems库

0

有了:

束EXEC耙分贝:迁移

在一个非正式的方式,意味着你的Rails环境将

-Install依赖与捆绑 然后 - 运行在你的Rails应用程序的数据库迁移(/ yourapp/DB /迁移)

除了数据库操作,你可以做任何其他的命令行的东西,可以通过耙控制(如建立你的应用程序,扩展,清理一些文件等)

,如果你想这可能是有用避免令人困惑的场景,可能是您的设置中某些宝石已过时,或从您的环境中丢失。这是一个很好的做法,因为调用rake本身并不能保证你得到了所有的依赖。

0

Bundler的作用是创建一个独立于底层主机系统的独立的Ruby语言编程环境。它可以做什么是有限的。例如,您需要像RVM这样的软件来管理不同版本的Ruby语言虚拟机。当然,Ruby和Bundler本身必须在您的项目之外才能运行。

但是,在一个项目中,bundle exec将限制Bundler安装到该项目中的宝石的访问权限。这意味着,通过bundle exec调用Rake实用程序将是您的项目中安装的rake版本,而不是系统范围的版本。这也意味着`bundle rake db:migrate'将使用为您的项目安装的正确版本的rails。这会将您的项目与主机上Ruby环境的更新隔离开来,从而防止出现兼容性问题。

您可以通过在你的.bash_profile创建别名(假设你使用OSX或Linux/UNIX)为bundle execbundle exec rakebundle exec rails绕过冗长。我使用bexec,刹车和brails。