Ruby on Rails 4引入了./bin
目录。 ./bin
内部包含一些可执行文件:bundle
,rails
,rake
,setup
,spring
。
我的问题是:
我已经阅读了这些文件的来源,并且我已经尝试了Google的目的,但我无法理解它。我正在寻找一个深入的解释。
*我相信很多这些文件存在于Rails 4之前,只是在不同的位置。
答案 0 :(得分:25)
在Rails 4中引入,./bin
目录包含你的应用程序的“binstubs”。 Binstubs是围绕gem可执行文件的包装器,如rails
或bundle
,它确保在Rails应用程序的正确环境中运行gem可执行文件。
可以使用Binstubs代替bundle exec
在应用程序环境中运行gem的可执行文件。例如,您可以键入bundle exec rails scaffold products
,而不是键入bin/rails scaffold products
。使用binstub比bundle exec
更灵活,因为您没有cd
到应用程序的根目录并在所有内容之前键入bundle exec
。
默认情况下,会为新的rails项目自动创建bundle
,rails
,rake
,setup
,spring
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任务运行,因为它们比我的应用程序更通用。