-
-
Save mignev/7952334 to your computer and use it in GitHub Desktop.
| require 'socket' | |
| # thanks to @mitio | |
| UNIXSocket.open('/tmp/fast.pid') do |fastrails| | |
| fastrails.write ARGV.join(' ') | |
| puts fastrails.read | |
| end |
| #!/usr/bin/env fast-rails | |
| code ... |
| #!/bin/bash | |
| # This file is located at /usr/bin/ | |
| exec scl-exec-ruby ruby /root/socket/client.rb "$@" |
| #!/bin/bash | |
| # scl <action> <collection1>...<collectionN> <command> doesn't handle multiple params for command. | |
| # If it did we would use: exec scl enable ruby193 "$@" | |
| # This file is located at /usr/bin/ | |
| COMMAND="$(printf "%q " "$@")" | |
| exec scl enable ruby193 "$COMMAND" | |
| require 'socket' | |
| require 'stringio' | |
| require "/var/www/approot/railsapp/config/environment" | |
| server_pid = "/tmp/fast.pid" | |
| File.delete(server_pid) if File.exist?(server_pid) | |
| server = UNIXServer.new(server_pid) | |
| puts "Fast Rails runner is started!" | |
| loop do | |
| client = server.accept | |
| client_arguments = client.recv(1024) | |
| splited_client_aruments = client_arguments.split(' ') | |
| command = splited_client_aruments.slice!(0) | |
| arguments = splited_client_aruments | |
| fork do | |
| arguments.each do |argument| | |
| ARGV << argument | |
| end | |
| begin | |
| $stdout = StringIO.new | |
| # thanks to @mitio | |
| load(command) | |
| client.puts($stdout.string) | |
| rescue SystemExit | |
| client.puts($stdout.string) | |
| rescue Exception | |
| client.puts( $!, $@ ) | |
| end | |
| end | |
| trap "CLD" do | |
| pid = Process.wait | |
| puts "Child pid #{pid}: terminated" | |
| end | |
| client.close | |
| end |
Хардкоднатия път към приложението е греда. Още повече, какво прави development проекта във /var/www? Това ми мяза на някакви PHP навици, и то лоши.
trap-а защо е в в loop-а? Не върши ли работа ако го сложиш извън?
Иначе, яко. Ако ти се вдига level, може да разгледаш drb за да не се занимаваш със сокети като грешен дявол.
Хардкоднатия път е защото ми трябва да си реша проблема само с 1 проект :), не съм го планирал за повевече от един прокет :)
Намира се във /var/www приложението е измислено да работи там поради някаква причина ?!? Трябва да питам RedHat защот така са го решили :))
Относно trap-a ... не мисля, че мога да ти дам разумент отговор ... мисля, че имаше някаква причина .... но не съм сигурен в момента!
Относно drb мерси :) ще го погледна, изглежда наистина интересно.
Здрасти,
мерси за насоките! Направих
client.rbкакто ти предложи. Много по-красиво и по-чисто е така! Мерси :)Относно
Kernel.load, не съм го използвал, защото съм глупав! Работи си екстра :)) Мерси и за това.Относно
sclтова е един тул на Red Had, на който истинското му име мисля е Software Collections, което в този конкретен случай се използва като алтернатива наRVM.Хубавото при него е, че работи и за други езици по същия начин. Тоест можеш да подкарваш различни версии на
NodeJS,Pythonи тнт.Също има разни благинки от сорта:
Ето това е за NodeJS например: