我的rails ./bin目录里面有什么?

时间:2014-12-20 20:28:32

标签: ruby-on-rails

Ruby on Rails 4引入了./bin目录。 ./bin内部包含一些可执行文件:bundlerailsrakesetupspring

我的问题是:

  1. 这些可执行文件有什么作用?它们为什么存在?
  2. 什么时候被调用?
  3. 我可以编辑吗?我为什么要编辑它们?
  4. 我已经阅读了这些文件的来源,并且我已经尝试了Google的目的,但我无法理解它。我正在寻找一个深入的解释。

    *我相信很多这些文件存在于Rails 4之前,只是在不同的位置。

2 个答案:

答案 0 :(得分:25)

在Rails 4中引入,./bin目录包含你的应用程序的“binstubs”。 Binstubs是围绕gem可执行文件的包装器,如railsbundle,它确保在Rails应用程序的正确环境中运行gem可执行文件。

可以使用Binstubs代替bundle exec在应用程序环境中运行gem的可执行文件。例如,您可以键入bundle exec rails scaffold products,而不是键入bin/rails scaffold products。使用binstub比bundle exec更灵活,因为您没有cd到应用程序的根目录并在所有内容之前键入bundle exec

默认情况下,会为新的rails项目自动创建bundlerailsrakesetupspring binstub。要为gem可执行文件创建binstub,只需键入bundle binstubs name_of_gem_executable即可。您将在./bin目录中找到新的binstub。

有人建议将./bin放入您的shell搜索$PATH,这样您就不必输入bin/rails,只需输入rails即可。这是有风险的,因为它取决于./bin中宝石可执行文件路径之前的$PATH;如果您碰巧忘记了这个排序并调整$PATH以便在binstub包装器之前找到gem的可执行文件,您可以轻松地调用gem的可执行文件 - 没有环境借口 - 没有意识到它。

答案 1 :(得分:3)

bin(二进制文件的简称)只不过是一个应用程序。正如您所注意到的,这些文件是ruby文件,但它们没有.rb扩展名,可以像shell命令一样从shell运行,而无需自己启动任何ruby解释器。

那么这些课程有什么用呢?我很确定你已经知道了rake bundle所做的那些。

关于spring,它是一个让你的应用程序在后台运行的宝石(因此它需要独立于应用程序运行)。他们github上有更多信息。

我认为没有理由编辑这些文件,但话虽如此,他们会重写ruby文件,以便您可以随心所欲地执行任何操作。可以找到您可能想要编辑的一个示例here

我个人确实把一些东西放在bin文件夹中。用于连接到远程服务器的脚本,或者我需要的ruby脚本,但我不想作为rake任务运行,因为它们比我的应用程序更通用。

相关问题