Che cosa è il modo migliore per mettere un piccolo rubino applicazione on-line?
-
22-08-2019 - |
Domanda
Ho una piccola applicazione rubino ho scritto che è un ricercatore anagramma. E 'per l'apprendimento rubino, ma vorrei mettere in su in linea per uso personale. Ho una certa esperienza con Rails, e molti qui hanno raccomandato Sinatra. Io sto bene con entrambi, ma non riesco a trovare tutte le informazioni su come utilizzare un file di testo al posto di un database.
L'applicazione è molto semplice, convalida nei confronti di un file di testo di un elenco di parole, poi trova tutti gli anagrammi. Ho presupposto che questo dovrebbe essere abbastanza semplice, ma mi sono bloccato su come importare file di testo che in Rails (o Sinatra se scelgo questo modo). Nel progetto Rails, ho messo il file di testo nella directory lib
.
Purtroppo, anche se il percorso sembra essere corretto in Rails, ottengo un errore:
no such file to load -- /Users/court/Sites/cvtest/lib/english.txt
(cvtest
è il nome del progetto rotaie)
Ecco il codice. E le grandi opere di per sé:
file_path = '/Users/court/Sites/anagram/dictionary/english.txt'
input_string = gets.chomp
# validate input to list
if File.foreach(file_path) {|x| break x if x.chomp == input_string}
#break down the word
word = input_string.split(//).sort
# match word
anagrams = IO.readlines(file_path).partition{
|line| line.strip!
(line.size == word.size && line.split(//).sort == word)
}[0]
#list all words except the original
anagrams.each{ |matched_word| puts matched_word unless matched_word == input_string }
#display error if
else
puts "This word cannot be found in the dictionary"
end
Soluzione
Factor l'effettiva funzionalità (trovare gli anagrammi) in un metodo. Chiamare questo metodo dal Web app.
In Rails, devi creare un azione di controllo che chiama questo metodo, invece di ActiveRecord. In Sinatra, si era appena creare un percorso che chiama il metodo. Ecco un esempio Sinatra:
get '/word/:input'
anagrams = find_anagrams(params[:input])
anagrams.join(", ")
end
Poi, quando si accede al http://yourapp.com/word/pool , lo farà print "loop, polo".
Altri suggerimenti
So che la questione è contrassegnata come risposta, ma io preferisco la seguente, in quanto utilizza parametri di query piuttosto che parametri di percorso base, il che significa che è possibile trasferire i parametri utilizzando un normale invio di un modulo GET:
require 'rubygems'
require 'sinatra'
def find_anagrams word
# your anagram method here
end
get '/anagram' do
@word = params['word']
@anagrams = find_anagrams @word if @word
haml :anagram
end
E la seguente Haml (si può usare qualsiasi linguaggio di template che preferite). Questo vi darà un modulo di input, e mostrare la lista di anagrammi se una parola è stata fornita e una lista anagramma è stato generato:
%h1
Enter a word
%form{:action => "anagram"}
%input{:type => "text", :name => "word"}
%input{:type => "submit"}
- if @word
%h1
Anagrams of
&= @word
- if @anagrams
%ul
- @anagrams.each do |word|
%li&= word
- else
%p No anagrams found
Con Sinatra, si può fare nulla. Questi esempi non ha nemmeno bisogno di Sinatra, si potrebbe rotolare il proprio cosa interfaccia rack.
require 'rubygems'
require 'sinatra'
require 'yaml'
documents = YAML::load_file("your_data.yml")
o
require 'rubygems'
require 'sinatra'
content = Dir[File.join(__DIR__, "content/*.textile)].map {|path|
content = RedCloth(File.read(path)).to_html
}
Etcetera.