【发布时间】:2015-01-23 17:43:04
【问题描述】:
我正在使用网络框架 Sinatra 尝试 Gentle Introduction to CarrierWave-教程。当我运行我的应用程序时,它启动得很好,应用程序要求我上传一个文件,它没有任何问题。但是,在上传文件时,应用程序向我抛出了一个“#String:0x3480d50 的未定义方法 `join'”-error。
我在互联网上浏览了一下,发现了这个issue at github,他们说错误可能是由于 Rack 和 Sinatra 之间的不兼容或安装了 Sinatra 的重复版本。
有人知道发生了什么吗?
我的uploader_app:
require 'carrierwave'
require 'sinatra'
require 'sqlite3'
require 'sequel'
require 'carrierwave/sequel'
DB = Sequel.sqlite
DB.create_table :uploads do
String :file
end
# uploader
class MyUploader < CarrierWave::Uploader::Base
storage :file
end
# model
class Upload < Sequel::Model
mount_uploader :file, MyUploader
end
# sinatra app
get '/' do
@uploads = Upload.all
erb :index
end
post '/' do
upload = Upload.new
upload.file = params[:image]
upload.save
redirect to('/')
end
__END__
@@ index
<!DOCTYPE html>
<html>
<body>
<div>
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" name="submit" value="Upload" />
</form>
<% @uploads.each do |upload| %>
<img src="<%= upload.file.url %>" />
<% end %>
</div>
</body>
</html>
【问题讨论】:
-
您能与我们分享堆栈跟踪吗?
-
@iain Sure link 它实际上给了我两个错误:一个如上所述的 NoMethodError 和一个“TypeError:无法将 nil 转换为字符串”。非常感谢任何帮助。
-
你不会发疯的。我刚刚安装并运行它,得到了同样的错误。我正在运行 Ruby 2.1.2 并使用捆绑程序对 gem 进行沙盒处理,但仍然失败。我会看看我能找到什么。
标签: ruby sinatra carrierwave