Каков наилучший способ разместить небольшое приложение ruby в Интернете?

StackOverflow https://stackoverflow.com/questions/706855

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть небольшое приложение ruby, которое я написал для поиска анаграмм.Это для изучения ruby, но я хотел бы разместить его в Интернете для личного использования.У меня есть некоторый опыт работы с Rails, и многие здесь рекомендовали Sinatra.Меня устраивает и то, и другое, но я не могу найти никакой информации о том, как использовать текстовый файл вместо базы данных.

Приложение довольно простое, проверяет соответствие текстовому файлу списка слов, затем находит все анаграммы.Я предполагал, что это должно быть довольно просто, но я застрял на импорте этого текстового файла в Rails (или Sinatra, если я выберу этот способ).В проекте Rails я поместил текстовый файл в lib справочник.

К сожалению, несмотря на то, что путь в Rails кажется правильным, я получаю сообщение об ошибке:

no such file to load -- /Users/court/Sites/cvtest/lib/english.txt 

(cvtest это название проекта rails)

Вот код.Это отлично работает само по себе:

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
Это было полезно?

Решение

Учитывайте фактическую функциональность (поиск анаграмм) в методе.Вызовите этот метод из вашего веб-приложения.

В Rails вы бы создали действие контроллера, которое вызывает этот метод вместо ActiveRecord .В Sinatra вы бы просто создали маршрут, который вызывает метод.Вот пример из жизни Синатры:

get '/word/:input'
  anagrams = find_anagrams(params[:input])
  anagrams.join(", ")
end

Затем, когда вы получите доступ к http://yourapp.com/word/pool, на нем будет напечатано "петля, поло".

Другие советы

Я знаю, что вопрос помечен как отвеченный, но я предпочитаю следующий, поскольку он использует параметры запроса, а не параметры на основе пути, что означает, что вы можете передать параметры, используя обычную отправку формы 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

И следующий haml (вы можете использовать любой язык шаблонов, который вы предпочитаете).Это предоставит вам форму ввода и покажет список анаграмм, если было введено слово и сгенерирован список анаграмм:

%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

С синатрой вы можете делать все, что угодно.Для этих примеров даже не требуется sinatra, вы могли бы создать свой собственный интерфейс rack.

require 'rubygems'
require 'sinatra'
require 'yaml'

documents = YAML::load_file("your_data.yml")

Или:

require 'rubygems'
require 'sinatra'
content = Dir[File.join(__DIR__, "content/*.textile)].map {|path|
  content = RedCloth(File.read(path)).to_html
}

И так далее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top