servir le répertoire courant à partir de la ligne de commande

94

quelqu'un pourrait-il me donner un indice, comment servir le répertoire actuel à partir de la ligne de commande avec ruby? ce serait génial, si je peux avoir une configuration à l'échelle du système (par exemple les types mime) et la lancer simplement à partir de chaque répertoire.

Sébastien
la source

Réponses:

203

Le moyen le plus simple possible (merci Aaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

Autre manière plus complexe:

ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"

Même la première commande est difficile à retenir, donc j'ai juste ceci dans mon .bashrc:

function serve {
  port="${1:-3000}"
  ruby -run -e httpd . -p $port
}

Il sert le répertoire actuel sur le port 3000 par défaut, mais vous pouvez également spécifier le port:

~ $ cd tmp
~/tmp $ serve      # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000   # ~/www served on port 5000
Daniel Perez Alvarez
la source
Si vous êtes sous Windows, est-il possible d'ajouter ceci à cmd ou powershell en tant que fonction?
Caleb
@Daniel - quand je lance votre one liner sur mon Mac. J'ai eu ce message d'erreur: constante non initialisée INT (NameError). L'utilisez-vous sur une plate-forme différente? Savez-vous comment je peux éviter cela? Mais si je l'écris dans un fichier disons myserver.rb puis fais "ruby myserver.rb", cela fonctionne très bien.
Tony Jiang
@TonyJiang J'utilise également un Mac. Je l'ai essayé avec Ruby 1.8.7, 1.9.3 et 2.0.0, et ils fonctionnent tous. Bizarre.
Daniel Perez Alvarez
7
Pour démistifier, ruby -run -e httpd . -p 9090consultez ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Il exécute la méthode httpd à partir de unla bibliothèque standard ruby, donc nécessite un.
Gee-Bee
1
@Deviljho si vous utilisez Mac ou Linux, ajoutez simplement une esperluette à la fin de la commande pour l'envoyer en arrière-plan: ruby -run -e httpd . -p 9090 & Si vous voulez le ramener au premier plan, utilisez fg.
Daniel Perez Alvarez
21

Comme Aaron Patterson l'a tweeté aujourd'hui, vous pouvez le faire:

ruby -run -e httpd . -p 5000

Et vous pouvez également définir l'adresse de liaison en ajoutant -b 127.0.0.1

Fonctionne avec Ruby 1.9.2 et supérieur.

KARASZI István
la source
5
require 'webrick'
include WEBrick

s = HTTPServer.new(:Port => 9090,  :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
rogerdpack
la source
4

Utilisez la gemme rubis Servez .

Pour installer sur votre système, exécutez gem install serve.

Pour servir un répertoire, il vous suffit d'accéder au répertoire et de l'exécuter serve.

Le port par défaut est 4000. Il peut également servir des éléments tels que ERB, HAML, Slim et SASS.

gelée
la source
3

Serveur Web en 1 ligne


C'est peut-être tout à fait ce que vous voulez ou non, mais c'est tellement cool que je devais juste le partager.

J'ai utilisé cela dans le passé pour servir le système de fichiers. Peut-être pourriez-vous le modifier ou simplement accepter qu'il sert tout.

ruby -rsocket -e 's=TCPServer.new(5**5);loop{_=s.accept;_<<"HTTP/1.0 200 OK\r\n\r\n#{File.read(_.gets.split[1])rescue nil}";_.close}'

Je l'ai trouvé ici

Chris

Chris McCauley
la source
3

Vous pouvez utiliser le sinatragem, bien qu'il ne fasse aucune liste de répertoires pour vous, il sert des fichiers:

require 'sinatra' # gem
set :public_folder, '.'

puis exécutez-le sous forme de fichier, si dans la version 1.8, ajoutez d'abord «rubygems» en haut.

Après l'avoir exécuté, l'URL est comme

http: // localhost: 4567 / nom_fichier

devrait se résoudre en fichier "./file_name".

Cependant, http: // localhost: 4567 ne fonctionnera pas, car il ne "fait" pas les listes de répertoires. Voir https://stackoverflow.com/a/12115019/32453 pour une solution de contournement.

rogerdpack
la source
installez le sinatra gem $ gem installez sinatra puis enregistrez ce texte dans somefile.rb puis exécutez-le
rogerdpack
Non, je veux dire, Sinatra me donne l'erreur: Sinatra ne connaît pas cette chanson.
eveevans
@eveevans vient de remarquer votre commentaire [LOL sorry], mis à jour maintenant.
rogerdpack le
1
python3 -m http.server

ou si vous ne souhaitez pas utiliser le port par défaut 8000

python3 -m http.server 3333

ou si vous souhaitez autoriser les connexions depuis l'hôte local uniquement

python3 -m http.server --bind 127.0.0.1

Consultez la documentation .

Boris
la source