@Zybasstik

Файлообменник ruby помощь в нахождении ошибки?

Доброе время суток, сразу скажу что пытаюсь сделать всё как на хабре описали "Домашний файлообменник на базе Sinatra и DataMapper. Часть 3 — Very Advanced features" Переписал всё в вирт машину. ubuntu server 14. При запуске "thin start -C thin.yml" появляеться лог файл с ошибками
>> Writing PID to /home/administrator/web/tmp/thin.pid
>> Exiting!
/home/administrator/web/config/config.ru:2:in `block in <main>': uninitialized constant Sinatra (NameError)
	from /usr/lib/ruby/vendor_ruby/rack/builder.rb:55:in `instance_eval'
	from /usr/lib/ruby/vendor_ruby/rack/builder.rb:55:in `initialize'
	from /home/administrator/web/config/config.ru:1:in `new'
	from /home/administrator/web/config/config.ru:1:in `<main>'
	from /usr/lib/ruby/vendor_ruby/rack/adapter/loader.rb:36:in `eval'
	from /usr/lib/ruby/vendor_ruby/rack/adapter/loader.rb:36:in `load'
	from /usr/lib/ruby/vendor_ruby/thin/controllers/controller.rb:181:in `load_rackup_config'
	from /usr/lib/ruby/vendor_ruby/thin/controllers/controller.rb:71:in `start'
	from /usr/lib/ruby/vendor_ruby/thin/runner.rb:185:in `run_command'
	from /usr/lib/ruby/vendor_ruby/thin/runner.rb:151:in `run!'
	from /usr/bin/thin:6:in `<main>'

Описание самого файла config.ru
require 'init'
Rack::Handler::Thin.run Sinatra::Application, :Port => 3000, :Host =>"192.168.0.14"

Сам только вчера начал скажем изучать ubuntu и всё связное.
  • Вопрос задан
  • 2697 просмотров
Решения вопроса 1
viktorvsk
@viktorvsk
Ошибка говорит, что не подключен с гем Sinatra.
Что находится в init.rb по статье как-то непонятно.
Вам куда-то нужно вставить
require 'sinatra'
или в init.rb или в config.ru
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Zybasstik Автор вопроса
Спасибо, да вы правы. Поставил в Config.ru и оно вроде как запустилось. Лог показал:
>> Writing PID to /home/administrator/web/tmp/thin.pid
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 192.168.0.14:4567, CTRL+C to stop

Но при попытке клиента подключиться вываливается ошибка:
!! Unexpected error while processing request: uninitialized constant Rack::MethodOverride::REQUEST_METHOD

Пока что сам смотрю... но если у кого есть идеи... рад услышать.
В итоге нашёл файл list.haml думаю здесь нужно покопаться?
- if @files.empty?
  %h1 Файлов нет.
- else
  .list
    %h1 Список файлов
    %table{ :cellspacing => 0}
      %tr
        %th Файл
        %th Загружен
        %th Скачан
        %th Удалить
      - @files.each do |file|
        %tr
          %td.filename
            %a{ :href => "/#{file.sha}/#{file.id}?nowait=true", :title => file.filename }= file.filename
            = "(#{file.filesize/1024} Kb)"
            %a{ :href => "/#{file.sha}/#{file.id}" } Для пересылки 
          %td.created_at= file.created_at.strftime("%d %b")
          %td.downloads= file.downloads
          %td.delete
            %a{ :href => "/#{file.sha}/#{file.id}/delete", :title => "Удалить", :onclick => "return ORLY();" } Удалить
.upload
  %h1 Добавить
  %form{ :name => "new_file", :enctype => "multipart/form-data", :method => "post", :action => "/" }
    %input{ :name => "file", :type => "file" }
    %br
    %input{ :type => "submit", :value => "Закачать" }

#init.rb
require 'rubygems'
require 'logger'
require 'ftools'
require 'dm-core'
require 'dm-validations'
require 'dm-timestamps'
require File.expand_path(File.dirname(__FILE__) + '/lib/stored_file')
require File.expand_path(File.dirname(__FILE__) + '/lib/sinatra/lib/sinatra')
require File.expand_path(File.dirname(__FILE__) + '/config/config')
require File.expand_path(File.dirname(__FILE__) + '/lib/authorization')

helpers do
  include Sinatra::Authorization
end

get '/' do
  require_administrative_privileges
  @files = StoredFile.all
  haml :list
end

post '/' do
  require_administrative_privileges
  tempfile = params['file'][:tempfile]
  filename = params['file'][:filename]
  digest = Digest::SHA1.hexdigest(filename)
  @file = StoredFile.create :filename => filename, :sha => digest, :filesize => File.size(tempfile.path)
  File.copy(tempfile.path, "./files/#{@file.id}.upload")
  redirect '/'
end

get '/style.css' do
  response['Content-Type'] = 'text/css; charset=utf-8'
  sass :style
end

get '/:sha/:id' do
  @file = StoredFile.first :sha => params[:sha], :id => params[:id]
  unless params[:nowait] == 'true'
    haml :download
  else
    @file.downloads += 1
    @file.save
    send_file "./files/#{@file.id}.upload", :filename => @file.filename, :type => 'Application/octet-stream'
  end
end

# delete file
get '/:sha/:id/delete' do
  require_administrative_privileges
  @file = StoredFile.first :sha => params[:sha], :id => params[:id]
  File.delete("./files/#{@file.id}.upload")
  @file.destroy
  redirect '/'
end
Ответ написан
Комментировать
@caution
uninitialized constant Sinatra (NameError)
uninitialized constant Rack

чтобы это значило, очень странные надписи. нужны эксперты.
Ответ написан
@fuCtor
Ruby разработчик
Покажите init.rb
Используете bundler?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы