Baixe Ruby.
Aqui você pode obter as distribuições mais recentes do Ruby no seu sabor favorito. A versão estável atual é 2.5.0. Por favor, não deixe de ler a Licença do Ruby.
Formas de instalar o Ruby.
Temos várias ferramentas em cada plataforma principal para instalar o Ruby:
No Linux / UNIX, você pode usar o sistema de gerenciamento de pacotes de sua distribuição ou ferramentas de terceiros (rbenv e RVM). Em máquinas OS X, você pode usar ferramentas de terceiros (rbenv e RVM). Em máquinas Windows, você pode usar o RubyInstaller.
Veja a página de instalação para detalhes sobre o uso de sistemas de gerenciamento de pacotes ou ferramentas de terceiros.
Claro, você também pode instalar o Ruby a partir do código-fonte em todas as principais plataformas.
Compilando Ruby - Código Fonte.
Instalar a partir do código-fonte é uma ótima solução para quando você estiver confortável o suficiente com sua plataforma e talvez precise de configurações específicas para seu ambiente. Também é uma boa solução se não houver outros pacotes pré-definidos para sua plataforma.
Veja a página de instalação para detalhes sobre a construção do Ruby a partir da fonte. Se você tiver um problema ao compilar o Ruby, considere o uso de uma das ferramentas de terceiros mencionadas acima. Eles podem ajudá-lo.
sha256: 8322513279f9edfa612d445bc111a87894fac1128eaa539301cebfc0dd51571e Na fase de manutenção de segurança (será EOL em breve!): Ruby 2.2.9.
sha256: 2f47c77054fc40ccfde22501425256d32c4fa0ccaf9554f0d699ed436beca1a6 Não mantido mais (EOL): Ruby 2.1.10.
sha256: fb2e454d7a5e5a39eb54db0ec666f53eeb6edc593d1d2b970ae4d150b831dd20 Instantâneos: Instantâneo estável: Este é um tarball do instantâneo mais recente do ramo estável atual. Nightly Snapshot: Este é um tarball do que quer que esteja no SVN, feito todas as noites. Isso pode conter erros ou outros problemas, use a seu próprio risco!
Para obter mais informações sobre versões específicas, particularmente versões ou visualizações mais antigas, consulte a página Releases. Informações sobre o status de manutenção atual dos vários ramos Ruby podem ser encontradas na página Ramificações.
Para informações sobre os repositórios Ruby Subversion e Git, veja nossa página Ruby Core.
A fonte Ruby está disponível em um conjunto mundial de Sites de Espelho. Por favor, tente usar um espelho que esteja perto de você.
Comece, é fácil!
Explore um novo mundo ...
Participe de uma comunidade amigável e crescente.
Mailing Lists: Fale sobre o Ruby com programadores de todo o mundo. Grupos de Usuários: Entre em contato com Rubistas em sua área. Weblogs: Leia sobre o que está acontecendo agora na comunidade Ruby. Ruby Core: Ajude a polir as arestas do último Ruby. Acompanhamento de problemas: informe ou ajude a solucionar problemas no Ruby.
Este site é orgulhosamente mantido por membros da comunidade Ruby.
Instalando o Ruby.
Você pode usar várias ferramentas para instalar o Ruby. Esta página descreve como usar os principais sistemas de gerenciamento de pacotes e ferramentas de terceiros para gerenciar e instalar o Ruby e como construir o Ruby a partir do código-fonte.
Escolha o seu método de instalação.
Existem várias maneiras de instalar o Ruby:
Quando você está em um sistema operacional semelhante ao UNIX, usar o gerenciador de pacotes do seu sistema é a maneira mais fácil de começar. No entanto, a versão empacotada do Ruby geralmente não é a mais nova. Os instaladores podem ser usados para instalar uma versão específica ou várias versões do Ruby. Existe também um instalador para o Windows. Os gerentes ajudam você a alternar entre várias instalações do Ruby em seu sistema. E finalmente, você também pode construir o Ruby a partir do código-fonte.
A visão geral a seguir lista os métodos de instalação disponíveis para diferentes necessidades e plataformas.
Sistemas de Gerenciamento de Pacotes.
Se você não puder compilar seu próprio Ruby e não quiser usar uma ferramenta de terceiros, poderá usar o gerenciador de pacotes do seu sistema para instalar o Ruby.
Certos membros na comunidade Ruby sentem muito fortemente que você nunca deve usar um gerenciador de pacotes para instalar o Ruby e que você deve usar ferramentas. Embora a lista completa de prós e contras esteja fora do escopo desta página, o motivo mais básico é que a maioria dos gerenciadores de pacotes tem versões mais antigas do Ruby em seus repositórios oficiais. Se você gostaria de usar o mais novo Ruby, certifique-se de usar o nome correto do pacote ou use as ferramentas descritas abaixo.
apt (Debian ou Ubuntu)
O Debian GNU / Linux e o Ubuntu usam o gerenciador de pacotes apt. Você pode usá-lo assim:
A partir da escrita, o pacote ruby-full fornece o Ruby 2.3.1, que é uma versão estável antiga, no Debian e no Ubuntu.
yum (CentOS, Fedora ou RHEL)
O CentOS, o Fedora e o RHEL usam o gerenciador de pacotes yum. Você pode usá-lo assim:
A versão instalada é normalmente a versão mais recente do Ruby disponível no momento do lançamento da versão de distribuição específica.
Portage (Gentoo)
O Gentoo usa o gerenciador de pacotes do portage.
Por padrão, isso tentará instalar as versões 1.9 e 2.0, mas há mais versões disponíveis. Para instalar uma versão específica, defina RUBY_TARGETS no seu make. conf. Veja o site do Projeto Gentoo Ruby para detalhes.
pacman (Arch Linux)
O Arch Linux usa um gerenciador de pacotes chamado pacman. Para obter o Ruby, faça o seguinte:
Isso deve instalar a última versão estável do Ruby.
Homebrew (OS X)
No MacOS (High) Sierra e no OS X El Capitan, o Ruby 2.0 está incluído.
Muitas pessoas no OS X usam o Homebrew como gerenciador de pacotes. É muito fácil obter uma versão mais recente do Ruby usando o Homebrew:
Isso deve instalar a versão mais recente do Ruby.
O FreeBSD oferece métodos pré-empacotados e baseados em fontes para instalar o Ruby. Pacotes pré-construídos podem ser instalados através da ferramenta pkg:
Um método baseado em origem pode ser usado para instalar o Ruby usando a Coleção de Portas. Isso é útil se você quiser personalizar as opções de configuração da compilação.
Mais informações sobre Ruby e seu ecossistema circundante no FreeBSD podem ser encontradas no site do Projeto FreeBSD Ruby.
Ruby no Solaris e OpenIndiana.
O Ruby 1.8.7 está disponível para o Solaris 8 a partir do Solaris 10 no Sunfreeware e o Ruby 1.8.7 está disponível no Blastwave. O Ruby 1.9.2p0 também está disponível no Sunfreeware, mas isso está desatualizado.
Para instalar o Ruby no OpenIndiana, use o cliente IPS (Image Packaging System). Isto irá instalar os binários Ruby e RubyGems diretamente dos repositórios OpenIndiana. É fácil:
No entanto, as ferramentas de terceiros podem ser uma boa maneira de obter a versão mais recente do Ruby.
Outras distribuições
Em outros sistemas, você pode pesquisar o repositório de pacotes do gerenciador de distribuição do Linux para Ruby, ou as ferramentas de terceiros podem ser a escolha certa para você.
Instaladores
Se a versão do Ruby fornecida pelo seu sistema ou gerenciador de pacotes estiver desatualizada, uma mais nova poderá ser instalada usando um instalador de terceiros. Alguns deles também permitem que você instale várias versões no mesmo sistema; gerentes associados podem ajudar a alternar entre os diferentes Rubis. Se você planeja usar o RVM como um gerenciador de versões, não precisa de um instalador separado, ele vem com o seu próprio.
O ruby-build é um plugin para o rbenv que permite compilar e instalar diferentes versões do Ruby em diretórios arbitrários. O ruby-build também pode ser usado como um programa autônomo sem rbenv. Está disponível para OS X, Linux e outros sistemas operacionais semelhantes ao UNIX.
Ruby-install.
O ruby-install permite que você compile e instale diferentes versões do Ruby em diretórios arbitrários. Há também um irmão, chruby, que manipula a troca entre as versões do Ruby. Está disponível para OS X, Linux e outros sistemas operacionais semelhantes ao UNIX.
RubyInstaller.
Se você está no Windows, existe um ótimo projeto para ajudá-lo a instalar o Ruby: RubyInstaller. Ele fornece tudo o que você precisa para configurar um ambiente de desenvolvimento Ruby completo no Windows.
Basta baixá-lo, executá-lo e pronto!
RailsInstaller e Ruby Stack.
Se você estiver instalando o Ruby para usar o Ruby on Rails, poderá usar os seguintes instaladores:
RailsInstaller, que usa o RubyInstaller, mas oferece ferramentas extras que ajudam no desenvolvimento do Rails. Suporta OS X e Windows. O Bitnami Ruby Stack, que fornece um ambiente de desenvolvimento completo para o Rails. Ele suporta OS X, Linux, Windows, máquinas virtuais e imagens em nuvem.
Muitos Rubistas usam gerenciadores Ruby para gerenciar múltiplos Rubis. Eles conferem várias vantagens, mas não são oficialmente suportados. Suas respectivas comunidades são muito úteis, no entanto.
chruby permite alternar entre vários Rubis. O chruby pode gerenciar os Rubies instalados pelo Ruby-Install ou até mesmo construídos a partir da fonte.
O rbenv permite gerenciar várias instalações do Ruby. Ele não suporta a instalação do Ruby, mas há um plugin popular chamado ruby-build para instalar o Ruby. Ambas as ferramentas estão disponíveis para OS X, Linux ou outros sistemas operacionais semelhantes ao UNIX.
RVM ("Ruby Version Manager")
O RVM permite instalar e gerenciar várias instalações do Ruby no seu sistema. Também pode gerenciar gemsets diferentes. Está disponível para OS X, Linux ou outros sistemas operacionais semelhantes ao UNIX.
O Uru é uma ferramenta de linha de comando leve e multiplataforma que ajuda você a usar vários Rubis em sistemas OS X, Linux ou Windows.
Construindo a partir da fonte.
Claro, você pode instalar o Ruby da fonte. Baixe e descompacte um tarball e faça o seguinte:
Por padrão, isso instalará o Ruby em / usr / local. Para mudar, passe a opção --prefix = DIR para o script ./configure.
Usar as ferramentas de terceiros ou os gerenciadores de pacotes pode ser uma ideia melhor, porque o Ruby instalado não será gerenciado por nenhuma ferramenta.
Comece, é fácil!
Explore um novo mundo ...
Participe de uma comunidade amigável e crescente.
Mailing Lists: Fale sobre o Ruby com programadores de todo o mundo. Grupos de Usuários: Entre em contato com Rubistas em sua área. Weblogs: Leia sobre o que está acontecendo agora na comunidade Ruby. Ruby Core: Ajude a polir as arestas do último Ruby. Acompanhamento de problemas: informe ou ajude a solucionar problemas no Ruby.
Este site é orgulhosamente mantido por membros da comunidade Ruby.
Opções binárias do Ruby
Obter via App Store Leia este post em nosso aplicativo!
Literais de string binária no Ruby 2.0.
Ao atualizar para o Ruby 2.0, um caso de teste começou a falhar:
com a seguinte mensagem:
A variável real contém uma string binária obtida de uma chamada de biblioteca externa.
O problema é que a codificação padrão dos arquivos de origem (e, portanto, literais de string) foi alterada em Ruby 2.0 de US-ASCII para UTF-8.
A solução é alterar a definição da string literal para impor sua codificação. Existem algumas opções possíveis para fazer isso:
Opções binárias do Ruby
Obter via App Store Leia este post em nosso aplicativo!
Como o Ruby manipula bytes / binário?
Estou tentando enviar uma série de bytes binários em um soquete, para atender a um padrão específico que minha empresa usa. Ninguém na minha empresa usou Ruby para isso antes, mas em outros idiomas, eles enviam os dados por um byte de cada vez (geralmente com algum tipo de método "pack").
Eu não consigo encontrar de qualquer maneira para criar binário na hora, ou criar bytes (o mais próximo que eu posso encontrar é como você pode transformar uma string em bytes representando seus caracteres).
Eu sei que você pode dizer algo como:
Mas como eu iria converter uma string no formulário "101010101" ou o inteiro resultante criado quando eu faço string. to_i (2) em um binário real. Se eu apenas enviar a string através de um socket, isso não enviará o ASCII para "0" e "1" em vez dos caracteres literais?
Certamente há alguma maneira de fazer isso nativamente em Ruby?
Para fazer uma string que tenha uma seqüência arbitrária de bytes, faça algo assim:
O "\ x" é um escape especial para codificar um byte arbitrário do hex, então "\ xE5" significa byte 0xE5.
Em seguida, tente enviar essa cadeia no soquete.
Não sei se isso ajuda bastante, mas você pode indexar os bits em um inteiro em ruby.
Dê uma olhada no método String. unpack. Isto é um exemplo:
Isso lhe dará valores inteiros. Existem mais maneiras de fazer a conversão.
Opções binárias do Ruby
A manutenção do Ruby 2.0.0 terminou em 24 de fevereiro de 2016. Leia mais.
Home Classes Métodos.
file. c io. c.
Namespace.
MÓDULO IO :: WaitReadable MODULE IO :: WaitWritable.
:: binread :: binwrite :: copy_stream :: for_fd :: foreach :: new :: open :: pipe :: popen :: read :: readlines :: selecione :: sysopen :: try_convert :: escrever # & quot; ; indica um subprocesso. O restante da string após o & quot; | & quot; é invocado como um processo com canais de entrada / saída apropriados conectados a ele.
Uma string igual a & quot; | - & quot; irá criar outra instância Ruby como um subprocesso.
O IO pode ser aberto com diferentes modos de arquivo (somente leitura, somente gravação) e codificações para conversão apropriada. Veja :: new para estas opções. Veja Kernel # open para detalhes dos vários formatos de comando descritos acima.
:: popen, a biblioteca Open3 ou o Process # spawn também podem ser usados para se comunicar com subprocessos através de um IO.
O Ruby converterá nomes de caminho entre diferentes convenções do sistema operacional, se possível. Por exemplo, em um sistema Windows, o nome do arquivo & quot; /gumby/ruby/test. rb" será aberto como & quot; \ gumby \ ruby \ test. rb & quot; . Ao especificar um nome de arquivo no estilo do Windows em uma string Ruby, lembre-se de escapar das barras invertidas:
Nossos exemplos aqui usarão barras invertidas no estilo Unix; File :: ALT_SEPARATOR pode ser usado para obter o caractere separador específico da plataforma.
A constante global ARGF (também acessível como $ & lt;) fornece um fluxo semelhante a IO que permite acesso a todos os arquivos mencionados na linha de comando (ou STDIN se nenhum arquivo for mencionado). O caminho ARGF # e seu alias ARGF # filename são fornecidos para acessar o nome do arquivo atualmente sendo lido.
A extensão io / console fornece métodos para interagir com o console. O console pode ser acessado a partir do IO. console ou dos objetos IO padrão de entrada / saída / erro.
Exigir que o io / console adicione os seguintes métodos:
Métodos de Classe Pública.
Abre o arquivo, opcionalmente procura o deslocamento especificado e, em seguida, retorna bytes de comprimento (padronizando para o restante do arquivo). binread garante que o arquivo seja fechado antes de retornar. O modo aberto seria drb: ASCII-8BIT.
O mesmo que IO. write, exceto a abertura do arquivo no modo binário e a codificação ASCII-8BIT ("wb: ASCII-8BIT").
Este método retorna o número de bytes copiados.
Se argumentos opcionais não forem fornecidos, a posição inicial da cópia é o início do nome do arquivo ou o deslocamento do arquivo atual do IO. A posição final da cópia é o final do arquivo.
Se copy_length for fornecido, não mais que copy_length bytes serão copiados.
Se src_offset for fornecido, ele especifica a posição inicial da cópia.
Quando src_offset é especificado e src é um IO, :: copy_stream não move o offset do arquivo atual.
Sinônimo para IO. new.
Executa o bloco para cada linha na porta de E / S nomeada, onde as linhas são separadas por sep.
Se nenhum bloco for fornecido, um enumerador será retornado.
Se o último argumento é um hash, é o argumento da palavra-chave a ser aberto. Veja IO. read para detalhes.
Retorna um novo objeto IO (um fluxo) para o dado descritor de arquivo inteiro fd e string de modo. opt pode ser usado para especificar partes do modo de uma forma mais legível. Veja também :: sysopen e :: for_fd.
:: new é chamado por vários métodos de abertura de arquivos e IOs, tais como :: open, Kernel # open e File. open.
Quando mode é um inteiro, deve ser uma combinação dos modos definidos em File :: Constants (File :: RDONLY, + File :: WRONLY | File :: CREAT +). Veja a página man open (2) para mais informações.
Quando o modo é uma string, ele deve estar em um dos seguintes formatos:
fmode é uma string de modo de abertura IO, ext_enc é a codificação externa para o IO e int_enc é a codificação interna.
IO Open Mode & para; & uarr;
Ruby permite os seguintes modos de abertura:
Os seguintes modos devem ser usados separadamente e junto com um ou mais dos modos vistos acima.
Quando o modo aberto do IO original é somente leitura, o modo não pode ser alterado para ser gravável. Da mesma forma, o modo de abertura não pode ser alterado de somente gravação para legível.
Quando tal mudança é tentada, o erro é levantado em locais diferentes de acordo com a plataforma.
IO Encoding & para; & uarr;
Quando ext_enc é especificado, as strings read serão marcadas pela codificação durante a leitura e a saída das strings será convertida para a codificação especificada durante a gravação.
Quando ext_enc e int_enc são especificados, as strings de leitura serão convertidas de ext_enc para int_enc na entrada, e as strings escritas serão convertidas de int_enc para ext_enc na saída. Consulte Codificação para mais detalhes sobre a transcodificação na entrada e na saída.
Se ЂњBOM | UTF-8 Ђќ, ЂњBOM | UTF-16LEЂќ ou ЂњBOM | UTF16-BEЂќ forem usados, as verificações de ruby de uma BOM Unicode no documento de entrada para ajudar a determinar a codificação. Para codificações UTF-16, o modo de abertura de arquivos deve ser binário. Quando presente, a lista técnica é removida e a codificação externa da lista técnica é usada. Quando a lista de materiais está faltando, a codificação dada em Unicode é usada como ext_enc. (A opção de codificação do conjunto BOM não faz distinção entre maiúsculas e minúsculas, por isso, βbom | utf-8 Ђќ também é válido.)
O opt pode ser usado em vez do modo para melhorar a legibilidade. As seguintes chaves são suportadas:
O mesmo que o parâmetro mode.
Codificação externa para o IO. O é um sinônimo para a codificação externa padrão.
Codificação interna para o IO. O é um sinônimo para a codificação interna padrão.
Se o valor for nulo, nenhuma conversão ocorrerá.
Especifica codificações externas e internas como "externo: interno".
Se o valor for verdade, o mesmo que "t" no modo de argumento.
Se o valor for verdade, igual a Ђњ no modo de argumento.
Se o valor for falso, o fd será mantido aberto depois que esta instância de IO for finalizada.
Além disso, o opt pode ter as mesmas chaves em String # codificada para controlar a conversão entre a codificação externa e a codificação interna.
Exemplo 2 & para; & uarr;
Ambas as imagens acima mostram "Olá, Mundo!" Em UTF-16LE para saída de erro padrão com a conversão de EOL gerada por puts em CR.
Sem bloco associado, IO. open é sinônimo de :: new. Se o bloco de código opcional for fornecido, ele será transmitido io como um argumento, e o objeto IO será automaticamente fechado quando o bloco terminar. Neste exemplo, :: open retorna o valor do bloco.
Veja :: new para uma descrição dos parâmetros fd, mode e opt.
Cria um par de terminais de tubo (conectados entre si) e os retorna como uma matriz de dois elementos de objetos de E / S: [read_io, write_io].
Se um bloco é dado, o bloco é chamado e retorna o valor do bloco. read_io e write_io são enviados para o bloco como argumentos. Se read_io e write_io não estiverem fechados quando o bloco sair, eles serão fechados. isto é, fechar read_io e / ou write_io não causa um erro.
Não disponível em todas as plataformas.
Se uma codificação (nome de codificação ou objeto de codificação) for especificada como um argumento opcional, a cadeia de leitura do pipe será marcada com a codificação especificada. Se o argumento for um dois-pontos separados por dois nomes de codificação: A: B, a cadeia de leitura será convertida da codificação A (codificação externa) para codificação B (codificação interna) e depois marcada com B. Se dois argumentos opcionais forem especificados, eles devem ser codificados objetos ou codificação de nomes, e o primeiro é a codificação externa e o segundo é a codificação interna. Se a codificação externa e a codificação interna forem especificadas, o argumento hash opcional especificará a opção de conversão.
No exemplo abaixo, os dois processos fecham as extremidades do pipe que eles não estão usando. Isto não é apenas uma beleza cosmética. O final de leitura de um pipe não gerará uma condição de fim de arquivo se houver algum gravador com o pipe ainda aberto. No caso do processo pai, o rd. read nunca retornará se ele não emitir primeiro um wr. close.
Executa o comando especificado como um subprocesso; a entrada e saída padrão do subprocesso será conectada ao objeto IO retornado.
O PID do processo iniciado pode ser obtido pelo método #pid.
cmd é uma string ou uma matriz da seguinte maneira.
Se cmd for uma String −−, uma nova instância de Ruby será iniciada como o subprocesso.
Se cmd for um Array of String, ele será usado como o argv do subprocesso ignorando um shell. O array pode conter um hash no início para ambientes e um hash para opções similares a spawn.
O modo padrão para o novo objeto de arquivo é "r", mas o modo pode ser definido para qualquer um dos modos listados na descrição para a classe IO. O último argumento opt qualifica o modo.
Gera exceções que IO. pipe e Kernel. spawn aumentam.
Se um bloco é dado, o Ruby executará o comando como um filho conectado ao Ruby com um pipe. A extremidade do tubo do Ruby será passada como um parâmetro para o bloco. No final do bloco, Ruby fecha o tubo e define $? . Neste caso, IO. popen retorna o valor do bloco.
Se um bloco for fornecido com um cmd de −−, o bloco será executado em dois processos separados: uma vez no pai e uma vez em um filho. O processo pai será transmitido ao objeto pipe como um parâmetro para o bloco, a versão filho do bloco será passada nil e o padrão de entrada e saída padrão da criança será conectado ao pai através do pipe. Não disponível em todas as plataformas.
Abre o arquivo, opcionalmente procura o deslocamento especificado e, em seguida, retorna bytes de comprimento (padronizando para o restante do arquivo). read garante que o arquivo seja fechado antes de retornar.
Se o último argumento for um hash, ele especifica a opção para open interno (). A chave seria a seguinte. open_args: é exclusivo para os outros.
string ou codificação.
especifica a codificação da string lida. a codificação será ignorada se o comprimento for especificado.
especifica o argumento de modo para open (). Deve começar com "caso contrário causará um erro".
array de strings.
Lê o arquivo inteiro especificado pelo nome como linhas individuais e retorna essas linhas em uma matriz. As linhas são separadas por sep.
Se o último argumento é um hash, é o argumento da palavra-chave a ser aberto. Veja IO. read para detalhes.
Chamadas selecionam (2) chamadas do sistema. Ele monitora os arrays de objetos de E / S, aguarda um ou mais objetos de E / S prontos para leitura, está pronto para gravação e tem exceções pendentes respeitáveis e retorna um array que contém arrays desses objetos de E / S. Ele retornará nil se o valor de tempo limite opcional for fornecido e nenhum objeto IO estiver pronto em segundos de tempo limite.
Parâmetros & para; & uarr;
uma matriz de objetos de ES que aguardam até estarem prontos para leitura.
uma matriz de objetos de ES que aguardam até que estejam prontos para gravação.
uma matriz de objetos de ES que aguardam exceções.
um valor numérico em segundo.
Abre o caminho fornecido, retornando o descritor de arquivo subjacente como um Fixnum.
Tente converter obj em um IO usando o método #to_io. Retorna IO convertido ou nulo se obj não puder ser convertido por qualquer motivo.
Abre o arquivo, opcionalmente procura o deslocamento especificado, grava string e retorna o comprimento gravado. write garante que o arquivo seja fechado antes de retornar. Se o deslocamento não for fornecido, o arquivo será truncado. Caso contrário, não é truncado.
Se o último argumento for um hash, ele especifica a opção para open interno (). A chave seria a seguinte. open_args: é exclusivo para os outros.
Métodos de Instância Pública.
conselho é um dos seguintes símbolos:
A semântica de um conselho depende da plataforma. Veja man 2 posix_fadvise para detalhes.
Essa lista não é exaustiva; outro Errno.
exceções também são possíveis.
Define o sinalizador de fechamento automático.
Retorna true se o descritor de arquivo subjacente do ios for fechado automaticamente na finalização, caso contrário, false.
Coloca o ios no modo binário. Depois que um fluxo estiver no modo binário, ele não poderá ser redefinido para o modo não-binário.
conversão de nova linha desativada.
conversão de codificação desativada.
o conteúdo é tratado como ASCII-8BIT.
Retorna true se ios for binmode.
Este é um alias obsoleto para each_byte.
Este é um alias obsoleto para each_char.
Fecha o ios e libera quaisquer gravações pendentes no sistema operacional. O fluxo não está disponível para outras operações de dados; um IOError é gerado se tal tentativa for feita. Os fluxos de E / S são fechados automaticamente quando são reivindicados pelo coletor de lixo.
Se o ios for aberto por IO. popen, feche os sets $? .
Define um sinalizador close-on-exec.
Ruby define os flags close-on-exec de todos os descritores de arquivos por padrão desde o Ruby 2.0.0. Então você não precisa definir por si mesmo. Além disso, a desativação de um sinalizador close-on-exec pode causar vazamento no descritor de arquivo se outro thread usar fork () e exec () (por meio do método system (), por exemplo). Se você realmente precisa de herança de descritor de arquivo para o processo filho, use o argumento spawn () como fd = & gt; fd.
Retorna true se o ios for fechado no exec.
Fecha o final de leitura de um fluxo de E / S duplex (isto é, um que contém um fluxo de leitura e de gravação, como um canal). Irá gerar um erro IOError se o fluxo não for duplexado.
Fecha a extremidade de gravação de um fluxo de E / S duplex (isto é, um que contém um fluxo de leitura e gravação, como um canal). Irá gerar um erro IOError se o fluxo não for duplexado.
Retorna true se o ios estiver completamente fechado (para fluxos duplex, leitor e gravador), caso contrário, false.
Este é um alias obsoleto para cada_codeponto.
Executa o bloco para cada linha no ios, onde as linhas são separadas por sep. ios deve ser aberto para leitura ou um IOError será gerado.
Se nenhum bloco for fornecido, um enumerador será retornado.
Chama o bloco especificado uma vez para cada byte (0.255) no ios, passando o byte como argumento. O fluxo deve ser aberto para leitura ou um IOError será gerado.
Se nenhum bloco for fornecido, um enumerador será retornado.
Chama o bloco especificado uma vez para cada caractere no ios, passando o caractere como um argumento. O fluxo deve ser aberto para leitura ou um IOError será gerado.
Se nenhum bloco for fornecido, um enumerador será retornado.
Passa o ordinal inteiro de cada caractere em ios, passando o codepoint como um argumento. O fluxo deve ser aberto para leitura ou um IOError será gerado.
Se nenhum bloco for fornecido, um enumerador será retornado.
Executa o bloco para cada linha no ios, onde as linhas são separadas por sep. ios deve ser aberto para leitura ou um IOError será gerado.
Se nenhum bloco for fornecido, um enumerador será retornado.
Retorna true se ios estiver no final do arquivo, o que significa que não há mais dados para ler. O fluxo deve ser aberto para leitura ou um IOError será gerado.
Se ios é um fluxo como pipe ou socket, IO # eof? blocos até que a outra extremidade envie alguns dados ou os feche.
Note que IO # eof? lê dados para o buffer de byte de entrada. Então IO # sysread pode não se comportar como você pretende com IO # eof? , a menos que você chame IO # rebobinar primeiro (que não está disponível para alguns fluxos).
Retorna true se ios estiver no final do arquivo, o que significa que não há mais dados para ler. O fluxo deve ser aberto para leitura ou um IOError será gerado.
Se ios é um fluxo como pipe ou socket, IO # eof? blocos até que a outra extremidade envie alguns dados ou os feche.
Note que IO # eof? lê dados para o buffer de byte de entrada. Então IO # sysread pode não se comportar como você pretende com IO # eof? , a menos que você chame IO # rebobinar primeiro (que não está disponível para alguns fluxos).
Retorna o objeto Encoding que representa a codificação do arquivo. Se o io for o modo de gravação e nenhuma codificação for especificada, retornará nulo.
Fornece um mecanismo para emitir comandos de baixo nível para controlar ou consultar fluxos de E / S orientados a arquivos. Argumentos e resultados dependem da plataforma. Se arg é um número, seu valor é passado diretamente. Se for uma string, ela é interpretada como uma seqüência binária de bytes (Array # pack pode ser uma maneira útil de construir essa string). Em plataformas Unix, consulte fcntl (2) para detalhes. Não implementado em todas as plataformas.
Imediatamente grava todos os dados em buffer no ios em disco.
Se o sistema operacional subjacente não suportar fdatasync (2), o IO # fsync será chamado (o que pode gerar um NotImplementedError).
Retorna um inteiro representando o descritor de arquivo numérico para ios.
Libera todos os dados armazenados em buffer dentro do ios para o sistema operacional subjacente (observe que isso é apenas buffer interno do Ruby; o sistema operacional também pode armazenar em buffer os dados).
Imediatamente grava todos os dados em buffer no ios em disco. Observe que o fsync difere do uso de IO # sync =. O último garante que os dados sejam liberados dos buffers do Ruby, mas não garante que o sistema operacional subjacente o grave no disco.
NotImplementedError é gerado se o sistema operacional subjacente não suportar fsync (2).
Obtém o próximo byte de 8 bits (0.255) do ios. Retorna nil se chamado no final do arquivo.
Lê uma string de um caractere do ios. Retorna nil se chamado no final do arquivo.
Lê a próxima linha do fluxo de E / S; linhas são separadas por sep. Um separador de zero lê todo o conteúdo, e um separador de comprimento zero lê a entrada um parágrafo de cada vez (duas novas linhas sucessivas nos parágrafos separados de entrada). O fluxo deve ser aberto para leitura ou um IOError será gerado. A linha lida será devolvida e também atribuída a $ _. Retorna nil se chamado no final do arquivo. Se o primeiro argumento for um inteiro, ou o segundo argumento opcional for fornecido, a cadeia retornada não será maior que o valor fornecido em bytes.
Retorna uma string descrevendo este objeto IO.
Retorna a codificação da string interna se a conversão for especificada. Caso contrário, retorna nulo.
Fornece um mecanismo para emitir comandos de baixo nível para controlar ou consultar dispositivos de E / S. Argumentos e resultados dependem da plataforma. Se arg é um número, seu valor é passado diretamente. Se for uma string, ela é interpretada como uma seqüência binária de bytes. Em plataformas Unix, veja ioctl (2) para detalhes. Não implementado em todas as plataformas.
Retorna true se o ios estiver associado a um dispositivo de terminal (tty), caso contrário, false.
Retorna o número da linha atual no ios. O fluxo deve ser aberto para leitura. O lineno conta o número de vezes que recebe é chamado em vez do número de novas linhas encontradas. Os dois valores serão diferentes se gets for chamado com um separador diferente de newline.
Métodos que usam $ / like each, linhas e readline também incrementarão lineno.
Veja também o $. variável.
Define manualmente o número da linha atual para o valor fornecido. $. é atualizado apenas na próxima leitura.
Este é um alias obsoleto para cada linha.
Retorna o ID do processo de um processo filho associado ao ios. Isso será definido por IO. popen.
Retorna o deslocamento atual (em bytes) do ios.
Procura a posição dada (em bytes) no ios. Não é garantido que buscar a posição correta quando ios é textmode.
Escreve o (s) objeto (s) especificado (s) para o ios. O fluxo deve ser aberto para gravação. Se o separador do campo de saída ($,) não for nulo, ele será inserido entre cada objeto. Se o separador de registro de saída ($ \) não for nulo, ele será anexado à saída. Se nenhum argumento for fornecido, imprime $ _. Objetos que não são strings serão convertidos chamando seu método to_s. Sem argumento, imprime o conteúdo da variável $ _. Retorna nulo.
Formata e grava no ios, convertendo parâmetros sob controle da string de formatação. Veja Kernel # sprintf para detalhes.
Se obj for Numérico, escreva o caractere cujo código é o byte menos significativo de obj, caso contrário, escreva o primeiro byte da representação de string de obj para ios. Nota: Este método não é seguro para uso com caracteres multi-byte, pois truncará os mesmos.
Escreve os objetos fornecidos para o ios como com impressão de IO #. Escreve um separador de registro (normalmente uma nova linha) depois de qualquer um que ainda não termine com uma sequência de nova linha. Se chamado com um argumento de matriz, escreve cada elemento em uma nova linha. Se chamado sem argumentos, gera um único separador de registro.
Lê bytes de comprimento do fluxo de E / S.
comprimento deve ser um número inteiro não negativo ou nulo.
Se length for um inteiro positivo, ele tentará ler bytes de tamanho sem qualquer conversão (modo binário). Ele retorna nil ou uma string cujo comprimento é de 1 a bytes de comprimento. nil significa que atingiu o EOF no início. A cadeia de bytes de 1 a 1 significa que atingiu o EOF depois de ler o resultado. The length bytes string means it doesn’t meet EOF. The resulted string is always ASCII-8BIT encoding.
If length is omitted or is nil , it reads until EOF and the encoding conversion is applied. It returns a string even if EOF is met at beginning.
If the optional outbuf argument is present, it must reference a String, which will receive the data. The outbuf will contain only the received data after the method call even if it is not empty at the beginning.
At end of file, it returns nil or "" depend on length . ios. read() and ios. read(nil) returns "" . ios. read( positive-integer ) returns nil .
Note that this method behaves like fread() function in C. This means it retry to invoke read(2) system call to read data with the specified length (or until EOF). This behavior is preserved even if ios is non-blocking mode. (This method is non-blocking flag insensitive as other methods.) If you need the behavior like single read(2) system call, consider readpartial, #read_nonblock and sysread.
Reads at most maxlen bytes from ios using the read(2) system call after O_NONBLOCK is set for the underlying file descriptor.
If the optional outbuf argument is present, it must reference a String, which will receive the data. The outbuf will contain only the received data after the method call even if it is not empty at the beginning.
#read_nonblock just calls the read(2) system call. It causes all errors the read(2) system call causes: Errno::EWOULDBLOCK, Errno::EINTR, etc. The caller should care such errors.
If the exception is Errno::EWOULDBLOCK or Errno::AGAIN, it is extended by IO::WaitReadable. So IO::WaitReadable can be used to rescue the exceptions for retrying read_nonblock.
If the read byte buffer is not empty, #read_nonblock reads from the buffer like readpartial. In this case, the read(2) system call is not called.
When #read_nonblock raises an exception kind of IO::WaitReadable, #read_nonblock should not be called until io is readable for avoiding busy loop. This can be done as follows.
Although #read_nonblock doesn’t raise IO::WaitWritable. OpenSSL::Buffering#read_nonblock can raise IO::WaitWritable. If IO and SSL should be used polymorphically, IO::WaitWritable should be rescued too. See the document of OpenSSL::Buffering#read_nonblock for sample code.
Note that this method is identical to readpartial except the non-blocking flag is set.
Reads a byte as with IO#getbyte , but raises an EOFError on end of file.
Reads a one-character string from ios . Raises an EOFError on end of file.
Reads a line as with IO#gets , but raises an EOFError on end of file.
Reads all of the lines in ios , and returns them in anArray . Lines are separated by the optional sep . If sep is nil , the rest of the stream is returned as a single record. If the first argument is an integer, or optional second argument is given, the returning string would not be longer than the given value in bytes. The stream must be opened for reading or an IOError will be raised.
Reads at most maxlen bytes from the I/O stream. It blocks only if ios has no data immediately available. It doesn’t block if some data available. If the optional outbuf argument is present, it must reference a String, which will receive the data. The outbuf will contain only the received data after the method call even if it is not empty at the beginning. It raises EOFError on end of file.
readpartial is designed for streams such as pipe, socket, tty, etc. It blocks only when no data immediately available. This means that it blocks only when following all conditions hold.
the byte buffer in the IO object is empty.
the content of the stream is empty.
the stream is not reached to EOF.
When readpartial blocks, it waits data or EOF on the stream. If some data is reached, readpartial returns with the data. If EOF is reached, readpartial raises EOFError.
When readpartial doesn’t blocks, it returns or raises immediately. If the byte buffer is not empty, it returns the data in the buffer. Otherwise if the stream has some content, it returns the data in the stream. Otherwise if the stream is reached to EOF, it raises EOFError.
Note that readpartial behaves similar to sysread. The differences are:
If the byte buffer is not empty, read from the byte buffer instead of “sysread for buffered IO (IOError)”.
It doesn’t cause Errno::EWOULDBLOCK and Errno::EINTR. When readpartial meets EWOULDBLOCK and EINTR by read system call, readpartial retry the system call.
The later means that readpartial is nonblocking-flag insensitive. It blocks on the situation #sysread causes Errno::EWOULDBLOCK as if the fd is blocking mode.
Reassociates ios with the I/O stream given in other_IO or to a new stream opened on path . This may dynamically change the actual class of this stream.
Positions ios to the beginning of input, resetting lineno to zero.
Note that it cannot be used with streams such as pipes, ttys, and sockets.
Seeks to a given offset anInteger in the stream according to the value of whence :
If single argument is specified, read string from io is tagged with the encoding specified. If encoding is a colon separated two encoding names “A:B”, the read string is converted from encoding A (external encoding) to encoding B (internal encoding), then tagged with B. If two arguments are specified, those must be encoding objects or encoding names, and the first one is the external encoding, and the second one is the internal encoding. If the external encoding and the internal encoding is specified, optional hash argument specify the conversion option.
Returns status information for ios as an object of type File::Stat .
Returns the current “sync mode” of ios . When sync mode is true, all output is immediately flushed to the underlying operating system and is not buffered by Ruby internally. See also IO#fsync .
Sets the “sync mode” to true or false . When sync mode is true, all output is immediately flushed to the underlying operating system and is not buffered internally. Returns the new state. See also IO#fsync .
(produces no output)
Reads maxlen bytes from ios using a low-level read and returns them as a string. Do not mix with other methods that read from ios or you may get unpredictable results. If the optional outbuf argument is present, it must reference a String, which will receive the data. The outbuf will contain only the received data after the method call even if it is not empty at the beginning. Raises SystemCallError on error and EOFError at end of file.
Seeks to a given offset in the stream according to the value of whence (see IO#seek for values of whence ). Returns the new offset into the file.
Writes the given string to ios using a low-level write. Returns the number of bytes written. Do not mix with other methods that write to ios or you may get unpredictable results. Raises SystemCallError on error.
Returns the current offset (in bytes) of ios .
Returns true if ios is associated with a terminal device (tty), false otherwise.
Pushes back bytes (passed as a parameter) onto ios , such that a subsequent buffered read will return it. Only one byte may be pushed back before a subsequent read operation (that is, you will be able to read only the last of several bytes that have been pushed back). Has no effect with unbuffered reads (such as IO#sysread ).
Pushes back one character (passed as a parameter) onto ios , such that a subsequent buffered character read will return it. Only one character may be pushed back before a subsequent read operation (that is, you will be able to read only the last of several characters that have been pushed back). Has no effect with unbuffered reads (such as IO#sysread ).
Writes the given string to ios . The stream must be opened for writing. If the argument is not a string, it will be converted to a string using to_s . Returns the number of bytes written.
Writes the given string to ios using the write(2) system call after O_NONBLOCK is set for the underlying file descriptor.
It returns the number of bytes written.
#write_nonblock just calls the write(2) system call. It causes all errors the write(2) system call causes: Errno::EWOULDBLOCK, Errno::EINTR, etc. The result may also be smaller than string. length (partial write). The caller should care such errors and partial write.
If the exception is Errno::EWOULDBLOCK or Errno::AGAIN, it is extended by IO::WaitWritable. So IO::WaitWritable can be used to rescue the exceptions for retrying write_nonblock.
If the write buffer is not empty, it is flushed at first.
When #write_nonblock raises an exception kind of IO::WaitWritable, #write_nonblock should not be called until io is writable for avoiding busy loop. This can be done as follows.
Note that this doesn’t guarantee to write all data in string. The length written is reported as result and it should be checked later.
On some platforms such as Windows, #write_nonblock is not supported according to the kind of the IO object. In such cases, #write_nonblock raises Errno::EBADF .
Binary packages #42.
sstephenson commented Sep 17, 2011.
I'd like to add binary package support to ruby-build. I'd guess that most ruby-build installations are on one of two platforms—Mac OS X x86_64 or Linux x86_64—and most people really don't need to compile their own Ruby runtimes. Binary packages would make it much quicker to get up and running.
In order to do this, we'll need a command to build a definition into a temporary directory and make a tarball. We'll also need a way to download and install package tarballs from the internet. This implies having package repository sources, an architecture naming system, and an index of packages with checksums.
sstephenson commented Sep 25, 2011.
Looks like --prefix is used to define the initial load path. It's compiled into the ruby binary itself:
Obviously these paths aren't going to be the same for everyone. Can we work around this?
sstephenson commented Sep 25, 2011.
Crazy idea: build Ruby with an unreasonably long --prefix , like.
. and search-and-replace that with the actual installation location after extracting the package.
We'd need to do this for the shebangs for commands like irb too.
josh commented Sep 25, 2011.
Skeptical about that. Compiled constants are going to be offset by their length. So replacing the placeholder with a shorter string is probably going to fuck up the memory addresses off all the other constants after it in the data segment.
sstephenson commented Sep 25, 2011.
We'd keep the strings the same length, obviously, and just replace the rest of the space with null bytes.
Save as rewrite. sh and run like so:
clowder commented Mar 29, 2012.
I was digging round the MacRuby source today and came across install_name_tool and instantly thought of this ticket.
On MacRuby it is being used to replace linking to the system MacRuby with one packaged inside the executable (see MacRuby/MacRuby@master).
fschwahn commented May 24, 2012.
assim. what happened to this? isn't it ready to go, I remember you tweeting about this a few month ago? if not, is there anything that needs to be done?
I really like the prospect to install ruby in a few seconds instead of a few minutes :)
john-griffin commented Aug 22, 2012.
Is there anything we can do to help out with this and get it finished?
haberbyte commented Nov 6, 2012.
I think Yehuda has solved that problem already!
petejkim commented Nov 15, 2012.
is it possible by any chance to use rvm's precompiled packages?
rosenfeld commented Nov 23, 2012.
When using precompiled packages ruby-build should probably build them with optimization flags ( - O3 or - O2 ) turned on.
Also, they should be also the default when compiling from source. In that case, it would be a good idea to also add - march=native .
pranas commented Feb 1, 2013.
Any progress? It's highly desirable feature.
ptrf commented May 29, 2013.
👍 Any progress? Post a gist maybe?
barttenbrinke commented Jun 6, 2013.
+1 Rubber (Ec2 automation) recently switched to Ruby-build (which is great!) but compiling Ruby 2.0 for each Amazon instance you spin up is something the world can really do without.
loopj commented Jul 19, 2013.
👍 would love to see support for this.
mattes commented Aug 8, 2013.
sheerun commented Nov 1, 2013.
Support for precompiled ruby would be awesome. +1.
sheerun commented Nov 2, 2013.
I made plugin for that github/sheerun/ruby-download It uses binaries precompiled by Boxen.
Improve the installation experience #69.
garnieretienne commented Mar 21, 2014.
I also made a plugin to download precompiled rubies from the RVM repository: github/garnieretienne/rvm-download. It's pretty basic but I can add functionnalities if other people are interrested (like listing available precompiled rubies or checksum verifications)
kiranos commented May 24, 2014.
Adding precompiled binaries would absolutely bee a great new feature. What technical difficulties are still present to make this happen other than structuring it?
mislav commented May 24, 2014.
I'd love if we had precompiled binaries support. It seems that a lot of people on this thread did some research, and it would be great if someone submitted a pull with a proof-of-concept:
What are the flags that we should use when compiling Ruby to make it reusable for other people How do we match a user's system to a precompiled Ruby version? What about dependencies such as libyaml and openssl? We install those explicitly for some Ruby definitions but also sometimes use system/Homebrew ones. For precompiled Rubies, we must include all dependencies. How do we precompile a Ruby version with consistent zlib/libyaml/openssl support?
Consider using one of the other rbenv plugins for getting rubies #107.
errm commented Jun 21, 2014.
So I had a look at what rvm are doing, with github/rvm/rvm-binary, they are setting a bunch of flags with rmv install --movable I have had a trawl through the source to work out what flags they are setting but I can't quite work it out, it looks like they are setting CFLAGS="-fPIC" LDFLAGS="-fPIC" . Also what they are doing only seems to work for 1.9.3 and above. They are using smf to install dependencies.
I created a gist with the config from the binaries built in this way on ubuntu 14.04 gist. github/errm/75474a643b8e5d09a444.
The generated binaries work fine once the simlink in /lib/ruby/gems/*/cache is removed and replaced with a dir . . .
michiels commented Jul 30, 2014.
I am currently working on this problem and my goal is to be able to provide/host Ruby binaries that are built with ruby-build so they can be used as rbenv binaries.
The first step was testing if the compile options in the previous comments on this issue would produce a sharable Ruby directory.
I have set up a a build infrastructure that can build Ruby versions on Ubuntu 12.04 and Ubuntu 14.04. I am publishing those binaries at this location: intercityup/binaries/ruby/ with PGP signed SHA1 checksums.
The binaries are compiled with.
It would be great if someone could test those binaries as "drop-in" placement into their. rbenv/versions directory to see if those work. I have already confirmed them personally by downloading them into my rbenv installation, installing some gems like bundler and rails and set up a Rails app with the native mysql2 extension.
On a Ubuntu 14.04 box or Vagrant you can test a binary version with:
I would really like to hear if they work and what people's thoughts are on:
Hosting (I'm happy to sponsor the primary CDN from intercityup/binaries/) but I can understand if the best place for this is the mirror 37s sponsors via CloudFront. Implementing as a plugin (like rbenv download ) or Maybe implement rbenv install --binary.
Thanks for testing in advance and I hope we can make rbenv binaries happen real soon!
mislav commented Jul 31, 2014.
On Wed, Jul 30, 2014 at 10:55 AM, Michiel Sikkes notifications@github.
Thanks for testing in advance and I hope we can make rbenv binaries happen.
Yay, this sounds really exciting!
Yes, the best place to host the official binaries would be our own.
I would like to see a pull request from you adding two things:
A script for maintainers to generate and publish binaries. As for the.
technical aspect of how to push to our CloudFront, see how we use s3-put. An option for ruby-build (and rbenv-install ) to try downloading a.
pre-built binary before it would actually compile a Ruby version.
The most important thing in this whole process is how to match the current.
system to the appropriate binary name. I think we need 4 components for.
every unique binary build:
So I guess we need ways to detect people's OS information.
michiels commented Jul 31, 2014.
Thank you Mislav. I'll start a PR with those two components.
For recognizing OS variables we can use the lsb_release on most distributions. For OS X we might need to use something different but it shouldn't be that hard with a lot of other tools already doing this.
My opinion is that right now it is out of scope to set up a script to launch build nodes on EC2 or DigitalOcean. So I think it's best to only include a "publish" script that can be run similar to gem publish . This will use the S3 push.
I will share our current build automation infrastructure scripts too. They can help maintainers build packages in one go.
Does all this make sense / are there any additional thoughts?
mislav commented Jul 31, 2014.
On Thu, Jul 31, 2014 at 2:05 PM, Michiel Sikkes notifications@github.
My opinion is that right now it is out of scope to set up a script to.
launch build nodes on EC2 or DigitalOcean.
Sounds awesome as the next step. But first let's publish a few manually and.
have people test them out.
lsb_release sounds alright for Ubuntu and similar but I'm not sure if all.
Linux have them.
michiels commented Jul 31, 2014.
Op 31 jul. 2014 om 23:38 heeft Mislav Marohnić notifications@github het volgende geschreven:
lsb_release sounds alright for Ubuntu and similar but I'm not sure if all.
Linux have them.
Bom ponto. I'll take a look at how chef/ohai/puppet do these types of OS recognition.
If anyone has ideas for a common method of extracting OS info: please post it! Obrigado.
brocktimus commented Jul 31, 2014.
lsb_release sounds alright for Ubuntu and similar but I'm not sure if all Linux have them.
Can confirm it isn't available on the RHEL variants, at least it can't be relied upon. It's available in an RPM but not installed by default on minimal at least.
michiels commented Aug 1, 2014.
Can confirm it isn't available on the RHEL variants, at least it can't be relied upon. It's available in an RPM but not installed by default on minimal at least.
Obrigado! Is the file /etc/lsb_release available?
We might need to build a lot of logic just for OS recognition. Or we can use an external dependency.
Is there any policy for using dependencies in ruby-build? I would assume the answer is "yes. 0" :)
Otherwise we might begin only recognizing common OSes (lsb_release, red hat, Mac, etc) like @sstephenson suggested in the starting comment of this issue.
brocktimus commented Aug 1, 2014.
Obrigado! Is the file /etc/lsb_release available? We might need to build a lot of logic just for OS recognition. Or we can use an external dependency.
I don't know if a dependency of lsb-release would be fine if you wanted the extra functionality. But I'm unsure how far it gets you compared to the alternatives. The other alternatives don't seem that bad since you can use lsb_release if it exists or otherwise check /etc/debian_version or /etc/redhat-release to grab the entire family. I have no idea about OSX though ;-).
michiels commented Aug 1, 2014.
I don't know if a dependency of lsb-release would be fine if you wanted the extra functionality. But I'm unsure how far it gets you compared to the alternatives. The other alternatives don't seem that bad since you can use lsb_release if it exists or otherwise check /etc/debian_version or /etc/redhat-release to grab the entire family. I have no idea about OSX though ;-).
Obrigado. I'll take a look!
garnieretienne commented Aug 1, 2014.
For info, this is how RVM detect the current OS to download its precompiled ruby in bash:
They seems to get the following data: system info, system type, system name, system version, system arch.
They use the uname command to get the system type (Linux, Darwin, Windows. ) If Linux is detected as the system type, they use a number of file name and content to find out which is the system name and version (and sometime system arch) ( /etc/lsb-release , /etc/altlinux-release , /etc/os-release , /etc/debian_version , . ) If non Linux they use dedicated command for each system to find system name, version and arch.
At the end they sanitarize each metadata and build the download URL using them.
mislav commented Sep 6, 2014.
Here's how I intend to extract basic OS information in ruby-build for build output purposes:
Of course, such a simplistic approach won't be enough for differentiating between binary builds. For example, it misses the information about system arch.
2.2.10 Build Error, LazyValueInfo. cpp missing insert #3169.
martinb3 commented Dec 12, 2014.
@sheerun Did ruby-download go away? It sounds useful!
sheerun commented Dec 12, 2014.
You probably mean ruby-download . I removed it because Boxen removed most of their builds.
I could reintroduce it, and change provider to phusion. github. io/traveling-ruby/ BUT it supports only Ruby 2.1. So it all depends whether @FooBarWidget wishes to support more ruby versions.
martinb3 commented Dec 12, 2014.
@sheerun It looks like TravisCI and rvm. io also provide binary builds.
sheerun commented Dec 12, 2014.
@FooBarWidget Do you know the difference between Travelling Ruby build & Travis?
I can't find rvm's builds. @martinb3 Do you know the API for them?
martinb3 commented Dec 12, 2014.
FooBarWidget commented Dec 12, 2014.
@sheerun No. Traveling Ruby's scope is limited to distributing apps. It's not meant to distribute Ruby binaries for general-purpose or development use. For that reason, we also have no intention to distribute more than a single version.
garnieretienne commented Dec 13, 2014.
@sheerun @martinb3 I've made this plugin to download and install rvm binaries for rbenv:
It use code from rvm to generate an URL and download the requested version of ruby from rvm. io/binaries/.
Download official binaries #11.
schlueter commented Oct 17, 2015.
Any movement on this?
md5 commented Oct 18, 2015.
are you serious guys? #794.
cybertk commented Dec 15, 2015.
mconigliaro commented Apr 4, 2016.
Wow, this still isn't solved? To be honest, I don't even care about getting your binaries to work on my machines. If there was just a simple way to check for a precompiled version of Ruby before building (e. g. RUBY_BUILD_BINARY_URL ?), I'd just build my own and host them myself.
md5 commented Apr 4, 2016.
@mconigliaro If you want to do that, you can use rbenv by itself and not use ruby-build since its purpose is to build Ruby for rbenv .
Alternatively to the install command, you can download and compile Ruby manually as a subdirectory of.
/.rbenv/versions/ . An entry in that directory can also be a symlink to a Ruby version installed elsewhere on the filesystem. rbenv doesn't care; it will simply treat any entry in the versions/ directory as a separate Ruby version.
mconigliaro commented Apr 4, 2016.
@md5 oh yeah, that's a good point. I could always just have my config management system download and unpack a set of precompiled versions to.
jasonkarns commented May 18, 2016 •
Super old issue, but I just wanted to pop in and say that node-build (direct fork, minimally modified) has added support for installing precompiled binaries. nodenv/node-build@ 474e872 (source has been modified slightly since that PR was merged, though)
We grab the system info via:
And a build definition looks like:
The binary function is invoked multiple times from the build definition; given the platform and package url. If the binary's platform matches the current system, the package url is saved to a global variable.
Then when install_package is invoked, if a global BINARY_URL has been set (and the user hasn't forced a compile with --compile ), it does an install_package . copy .
It's a pretty hacky workflow, and I would love to find a more elegant solution. But it works and, I think, could be adopted for ruby-build.
mislav commented May 19, 2016.
@jasonkarns Thanks for sharing! That's an interesting approach to fetching precompiled binaries.
In my opinion, it's not such a problem to make ruby-build fetch precompiled binaries as it is to make a system to package and publish precompiled binaries in the first place.
This was referenced Oct 11, 2016.
Replace 'rbx-2' with 'rbx'. travis-ci/docs-travis-ci-com#740.
Upgrade ruby versions konklone/oversight. garden#157.
koenpunt commented Jan 23, 2017 •
Travis actually has precompiled rubies: rubies. travis-ci.
Edit; I believe these are build against local libraries, so are not universally usable;
This was referenced Feb 1, 2017.
Can rbenv be used to install ruby binaries instead of building from source? #1054.
Speed up Ruby installation BR0kEN-/cikit#93.
&cópia de; 2018 GitHub , Inc. Terms Privacy Security Status Help.
Você não pode realizar essa ação no momento.
Você entrou com outra guia ou janela. Reload to refresh your session. Você saiu de outra guia ou janela. Reload to refresh your session.
Obter via App Store Leia este post em nosso aplicativo!
Como o Ruby manipula bytes / binário?
Estou tentando enviar uma série de bytes binários em um soquete, para atender a um padrão específico que minha empresa usa. Ninguém na minha empresa usou Ruby para isso antes, mas em outros idiomas, eles enviam os dados por um byte de cada vez (geralmente com algum tipo de método "pack").
Eu não consigo encontrar de qualquer maneira para criar binário na hora, ou criar bytes (o mais próximo que eu posso encontrar é como você pode transformar uma string em bytes representando seus caracteres).
Eu sei que você pode dizer algo como:
Mas como eu iria converter uma string no formulário "101010101" ou o inteiro resultante criado quando eu faço string. to_i (2) em um binário real. Se eu apenas enviar a string através de um socket, isso não enviará o ASCII para "0" e "1" em vez dos caracteres literais?
Certamente há alguma maneira de fazer isso nativamente em Ruby?
Para fazer uma string que tenha uma seqüência arbitrária de bytes, faça algo assim:
O "\ x" é um escape especial para codificar um byte arbitrário do hex, então "\ xE5" significa byte 0xE5.
Em seguida, tente enviar essa cadeia no soquete.
Não sei se isso ajuda bastante, mas você pode indexar os bits em um inteiro em ruby.
Dê uma olhada no método String. unpack. Isto é um exemplo:
Isso lhe dará valores inteiros. Existem mais maneiras de fazer a conversão.
No comments:
Post a Comment