【问题标题】:Whats the best way to put a small ruby app online?将小型 ruby​​ 应用程序放到网上的最佳方式是什么?
【发布时间】:2010-10-16 22:49:28
【问题描述】:

我写了一个小的 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

【问题讨论】:

    标签: ruby-on-rails ruby sinatra


    【解决方案1】:

    将实际功能(查找字谜)分解为方法。从您的 Web 应用程序调用该方法。

    在 Rails 中,您将创建一个调用该方法而不是 ActiveRecord 的控制器操作。在 Sinatra 中,您只需创建一个调用该方法的路由。这是一个 Sinatra 示例:

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

    然后,当你访问http://yourapp.com/word/pool时,它会打印“loop, polo”。

    【讨论】:

      【解决方案2】:

      我知道这个问题被标记为已回答,但我更喜欢以下内容,因为它使用查询参数而不是基于路径的参数,这意味着您可以使用常规 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
      

      【讨论】:

        【解决方案3】:

        使用 sinatra,您可以做任何事情。这些示例甚至不需要 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
        }
        

        等等。

        【讨论】:

          猜你喜欢
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-08
          相关资源
          最近更新 更多