Chcę umieścić skrypt powłoki w folderze bin mojego gem, wraz z innymi programami Ruby, które należą do pakietu. Chciałbym, aby ten skrypt powłoki został zainstalowany w katalogu bin jako-jest (to jest, bez wrapperów). Czy to możliwe z klejnotami Ruby? Byłbym zadowolony z haków po instalacji, jeśli nie jest to możliwe w inny sposób. Ktoś ma z tym jakieś doświadczenie?Wdróż skrypt powłoki z klejnotem Ruby i zainstaluj w katalogu bin
Odpowiedz
Ten problem jest opisany tutaj: https://github.com/rubygems/rubygems/issues/88
Jeśli gem jesteś opracowanie jest przeznaczone tylko do użytku własnego, wystarczy zainstalować go z
gem install --no-wrapper my_gem
Myślę, że najlepszym napisz skrypt ruby, który uruchamia twój skrypt basha. Oto przykład, w jaki sposób zrobić to:
bin/test_gem
#!/usr/bin/env ruby
bin_dir = File.expand_path(File.dirname(__FILE__))
shell_script_path = File.join(bin_dir, 'test_gem.sh')
`#{shell_script_path}`
bin/test_gem.sh
#!/bin/sh
echo "Hello World!"
test_gem.gemspec
spec.files = [
# ...
'bin/test_gem', 'bin/test_gem.sh'
]
# ...
spec.executables = ['test_gem']
UWAGA: Nie zapomnij ustawić oba pliki w folderze bin
do wykonywalnego!
Należy pamiętać, że podczas test_gem.sh
jest zarejestrowany komendy files
rubygems, to nie jest zarejestrowany jako executables
: to po prostu być umieszczone w zainstalowanych gem reż ale nie zawinięty/podkładano.
Jeśli zainstalujesz gem (i uruchomi ponownie rehash w razie potrzeby), wywołanie test_gem
spowoduje skrypt ruby wykonujący twój skrypt powłoki.
Co próbowaliście? To powinno zadziałać, o ile wiem. Opakowanie może być stosowane, ale nie powinno to być dużym problemem. W większości przypadków rzeczy takie jak 'bundle exec' będą działały poprawnie. – tadman
Niestety, to jest problem. Opakowanie to skrypt ruby, który próbuje załadować mój skrypt powłoki i wykonać go jako program Ruby. Najwyraźniej barfuje po napotkaniu składni bash. – scientistician
Jeśli piszesz klejnot Ruby, musisz trzymać się konwencji, które narzuca. Jednym z nich jest oczekiwanie, że twoje skrypty będą kompatybilne z wersją Ruby wybraną przez użytkownika. Jeśli potrzebujesz uruchomić skrypt powłoki, możesz zawsze użyć 'exec', aby przekonwertować proces Ruby do skryptu bash z tymi samymi argumentami. – tadman