Что внутри моего рельса./bin?
Ruby on Rails 4 представил * каталог ./bin
. Внутри ./bin
есть несколько исполняемых файлов: bundle
, rails
, rake
, setup
, spring
.
Мои вопросы:
- Что делают эти исполняемые файлы? Почему они существуют?
- Когда они вызываются?
- Могу ли я их редактировать? Почему я должен их редактировать?
Я прочитал источник этих файлов, и я попытался использовать их в Google, но я не могу обернуть его вокруг. Я ищу подробное объяснение.
* Я считаю, что многие из этих файлов существовали до Rails 4, только в другом месте.
Ответы
Ответ 1
Представленный в Rails 4 каталог ./bin
содержит ваше приложение "binstubs". Binstubs - это обертки вокруг исполняемых файлов gem, например rails
или bundle
, что гарантирует, что исполняемый файл gem запускается внутри правильной среды для вашего приложения Rails.
Binstubs можно использовать вместо bundle exec
для запуска исполняемого исполняемого файла в среде вашего приложения. Например, вместо ввода bundle exec rails scaffold products
вы можете ввести bin/rails scaffold products
. Использование binstubs более гибко, чем bundle exec
, потому что вам не нужно cd
в корневой каталог приложения и введите bundle exec
перед тем, как все.
По умолчанию для новых проектов рельсов автоматически создаются bundle
, rails
, rake
, setup
, spring
binstubs. Чтобы создать binstub для исполняемого файла, просто введите bundle binstubs name_of_gem_executable
. Вы найдете новый binstub в своем каталоге ./bin
.
Некоторые предлагают помещать ./bin
в поиск оболочки $PATH
, так что вам не нужно вводить bin/rails
, и вы можете просто ввести rails
. Это рискованно, потому что он зависит от ./bin
, предшествующего исполняемому пути жемчужины в $PATH
; если вы случайно забыли это упорядочение и настроите $PATH
так, чтобы исполняемый файл gem был найден до оболочки binstub, вы могли бы легко вызвать исполняемый файл gem - без экологического предлога - без его реализации.
Ответ 2
Бит (короткий для двоичного) - это не что иное, как приложение. Как вы заметили, эти файлы являются рубиновыми, но они не имеют расширения .rb и могут быть запущены из вашей оболочки так же, как любая команда оболочки, без необходимости запуска любого ruby-интерпретатора.
Итак, что делают программы тезисов? Я почти уверен, что вы уже знаете, что делают рейки.
О spring, это драгоценный камень, который поддерживает ваше приложение в фоновом режиме (отсюда его нужно запускать независимо от приложения). Дополнительная информация на их github.
Я не вижу причин редактировать эти файлы, но, как говорится, они рубиновые файлы, поэтому вы можете делать с ними все, что хотите. Один пример того, почему вы хотите редактировать, можно найти здесь.
Я лично вкладываю некоторые вещи в папку bin. Скрипты для подключения к удаленным серверам или рубиновые скрипты, которые мне нужны, но которые я не хочу запускать как rake-задачи, поскольку они более общие, чем мое приложение.