Como usar especificar versão do ruby ​​para shell script com rbenv?

8

Vou escrever um script curto em ruby. E eu quero especificar a versão ruby ​​por shebang ou de outra maneira.

Vou usar o script em muitos ambientes. Estou usando o rbenv nos ambientes, mas não há certeza de qual versão do ruby ​​está instalada.

O script deve falhar se a versão especificada do ruby ​​não estiver instalada.

Como eu posso fazer isso? Existe um bom caminho que devo seguir?

ferros e areias
fonte

Respostas:

7

De acordo com os documentos oficiais , parece que você só precisa prefixar seus scripts assim:

#!/usr/bin/env ruby

E, em seguida, siga um destes procedimentos para informar rbenvqual versão do Ruby usar:

trecho: https://github.com/sstephenson/rbenv

Escolhendo a versão Ruby

Quando você executa um shim, rbenvdetermina qual versão do Ruby usar lendo a partir das seguintes fontes, nesta ordem:

  1. A RBENV_VERSIONvariável de ambiente, se especificada. Você pode usar o rbenvcomando shell para definir essa variável de ambiente na sua sessão atual do shell.

  2. O primeiro .ruby-versionarquivo encontrado pesquisando o diretório do script que você está executando e cada um de seus diretórios pai até atingir a raiz do seu sistema de arquivos.

  3. O primeiro .ruby-versionarquivo encontrado pesquisando o diretório de trabalho atual e cada um de seus diretórios pai até atingir a raiz do seu sistema de arquivos. Você pode modificar o .ruby-versionarquivo no diretório de trabalho atual com o rbenvcomando local.

  4. O ~/.rbenv/versionarquivo global . Você pode modificar este arquivo usando o rbenvcomando global Se o arquivo da versão global não estiver presente, rbenvassume que você deseja usar o Ruby "system" - ou seja, qualquer versão que seria executada se rbenvnão estivesse no seu caminho.

Você pode usar este comando para criar um .ruby-versionarquivo no diretório junto com o script Ruby.

$ rbenv local 1.9.3-p327
slm
fonte
Preterido agora; Por documento especificado; Agora, quando você executa scripts ou binstubs em um aplicativo com um arquivo de versão .ruby, o rbenv usa automaticamente a versão Ruby especificada do aplicativo, independentemente de qual diretório ele é executado.
AnneTheAgile