Какой лучший способ выложить небольшое онлайн приложение в рубин? - PullRequest
3 голосов
/ 01 апреля 2009

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

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

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

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

(cvtest - название проекта рельсов)

Вот код. Он прекрасно работает сам по себе:

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

Ответы [ 3 ]

5 голосов
/ 02 апреля 2009

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

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

%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
5 голосов
/ 01 апреля 2009

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

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

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

Затем при доступе к http://yourapp.com/word/pool, будет напечатано «loop, polo».

3 голосов
/ 01 апреля 2009

С синатрой вы можете делать все что угодно. Эти примеры даже не требуют sinatra, вы можете свернуть свой собственный интерфейс стойки.

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
}

Etcetera.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...