Quelle est la meilleure façon de mettre une petite application rubis en ligne?
-
22-08-2019 - |
Question
J'ai une petite application Ruby j'ai écrit c'est un chercheur anagram. Il est pour Ruby apprendre, mais je voudrais le mettre en ligne pour un usage personnel. J'ai une certaine expérience avec Rails, et beaucoup ici ont recommandé Sinatra. Je suis très bien avec soit, mais je ne peux trouver aucune information sur la façon d'utiliser un fichier de texte au lieu d'une base de données.
L'application est assez simple, valide contre un fichier texte d'une liste de mots, trouve alors tous les anagrammes. Je suis en supposant que cela devrait être assez simple, mais je suis coincé sur l'importation que dans Rails textfile (ou Sinatra, si je choisis de cette façon). Dans le projet Rails, je l'ai placé le fichier texte dans le répertoire lib
.
Malheureusement, même si le chemin semble être correct dans Rails, je reçois une erreur:
no such file to load -- /Users/court/Sites/cvtest/lib/english.txt
(cvtest
est le nom du projet sur les rails)
Voici le code. Il fonctionne très bien par lui-même:
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
La solution
Facteur la fonctionnalité réelle (trouver les anagrammes) dans un procédé. Appelez cette méthode à partir de votre application Web.
Dans Rails, vous allez pouvoir créer une action de contrôleur qui appelle cette méthode au lieu de ActiveRecord. Dans Sinatra, vous voulez juste créer un itinéraire qui appelle la méthode. Voici un exemple Sinatra:
get '/word/:input'
anagrams = find_anagrams(params[:input])
anagrams.join(", ")
end
Ensuite, lorsque vous accédez à la http://yourapp.com/word/pool , il sera print "boucle, polo".
Autres conseils
Je sais que la question est marqué comme ayant été, mais je préfère ce qui suit, car il utilise des paramètres de requête plutôt que des paramètres à base de chemin, ce qui signifie que vous pouvez passer les paramètres à l'aide d'une présentation régulière de formulaire 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
Et la haml suivante (vous pouvez utiliser quel que soit la langue modèle que vous préférez). Cela vous donnera une forme d'entrée et afficher la liste des anagrammes si un mot a été fourni et une liste anagram a été générée:
%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
Avec sinatra, vous pouvez faire quoi que ce soit. Ces exemples ne nécessite même pas sinatra, vous pouvez rouler votre propre chose interface rack.
require 'rubygems'
require 'sinatra'
require 'yaml'
documents = YAML::load_file("your_data.yml")
Ou:
require 'rubygems'
require 'sinatra'
content = Dir[File.join(__DIR__, "content/*.textile)].map {|path|
content = RedCloth(File.read(path)).to_html
}
Etcetera.