dwilkie / carrierwave_direct Goto Github PK
View Code? Open in Web Editor NEWProcess your uploads in the background by uploading directly to S3
License: MIT License
Process your uploads in the background by uploading directly to S3
License: MIT License
Hi,
it seems to me that it is impossible to mix CarrierWaveDirect uploaders with vanilla CarrierWave uploaders. Are there any plans to facilitate for this scenario?
We've been using vanilla (non-direct) CarrierWave in production for a while. Recently I tried using this gem for an upload form. After including the module in the Uploader class, the URLs for the various versions of my existing images are now broken. It seems that when this gem's module is included, the generated version key format looks like "blahblah_versionName.jpg", while with vanilla CarrierWave they look like "versionName_blahblah.jpg".
In the end it wasn't a huge deal to fix (had to recreate_versions! for all the images and save the AR model) but nevertheless this was a nasty surprise. Is there a reason why this gem needs to change the versions' key format?
I found that the upload_directly
helper for Capybary tests should be as following:
upload_directly(AvatarUploader.new, "Upload to S3")
not
upload_directly(AvatarUploader, "Upload to S3")
Should it be correct?
Here is the my test:
visit edit_project_path(@project)
attach_file_for_direct_upload(Rails.root.join('spec', 'support', 'videos', 'media.mp4'))
upload_directly(VideoUploader.new, "Upload Video")
#... assertion
I wonder if carrierwave_direct can work without ActiveRecord
Thanks.
After uploading to Amazon, when the key comes back, then I'm supposed to save the key. The key magically populates the avatar field in Users. So, if I validate avatar with presence, it will return back false because it hasn't been populated yet during the validation of the active record cycle, but the whole idea of trying to validate presence is so that the form doesn't send a request to Amazon. What's the proper way to validate presence then?
0.6.0 had some breaking changes. For example, the following error occurs:
undefined local variable or method `s3_access_policy' for :ImageUploader
This is because there is no longer an s3_access_policy. Not sure if this is the only incompatibility.
The dollar signs for the tokens need to be % signs to work...
(so ${extension_white_list} becomes %{extension_white_list} for instance)
Hi,
when I generate a direct upload form using your form builder, the field with the uploader key appears like this:
where "clip" is the class and with "uploads/#{model.class.to_s.underscore}/#{mounted_as}" in clip_uploader.rb
If I submit the form, the file is uploaded in the directory uploads/clip/name/27aedf10-2e58-012f-0aad-0025bce64796/${filename} but there is no redirect to my server after the upload.
Any idea what can be wrong?
Thanks.
Hi - I would like to integrate this gem - however curious if someone can give me an example of using it in a fields_for type implementation.
I already have carrierwave working well - for instance, updating a user profile and their logo all in the same form. However, I would like upload the file directly so curious how to do this as I am now but using Carrierwave_direct.
Any help appreciated.
I have a model called Document
. It has the mounter attribute :attachment
Every time I pick Document.last.attachment.filename
it returns nil.
I see in the code the filename method:
def filename
unless has_key?
# Use the attached models remote url to generate a new key otherwise return nil
remote_url = model.send("remote_#{mounted_as}_url")
remote_url ? key_from_file(CarrierWave::SanitizedFile.new(remote_url).filename) : return
end
key_path = key.split("/")
filename_parts = []
filename_parts.unshift(key_path.pop)
unique_key = key_path.pop
filename_parts.unshift(unique_key) if unique_key
filename_parts.join("/")
end
If I call Document.last.attachment.has_key?
it returns false...
But
Document.last.attachment.key
gives me:
"assets/7e08d8f0-2783-0130-fea7-60fb42ee9ec8/${filename}"
I used RailsCasts' Carrierwave tutorial to get my image to upload and display, and now I wanted to get the images to upload directly to S3 with CarrierWaveDirect, but "uninitialized constant ImageUploader::CarrierWaveDirect" this error shows.
(I don't really know where the images were stored with just the CW, but I'm guessing inside the application)
After the Railscasts' version,
Do I need to change anything else? I also didn't really understand what
"Make sure you are loading CarrierWave after loading your ORM, otherwise you'll need to require the relevant extension manually, e.g.: require 'carrierwave/orm/activerecord' " meant in the original CW readme.
I am just confused what I need to do because both the original CW and CW_direct readme's mention S3 uploading, and I am caught in between the two directions that both are giving...
Can anyone please help me understand what's wrong and why it says 'uninitialized constant ImageUploader::CarrierWaveDirect'? I also had an error saying something about unauthentic, and I was assuming it had something to do with Devise - is that because the image is being attached to the user generated by Devise and I need to configure something?
This is not an issue, but more of a question, but i don't see any other method of asking so...
Is there a way to support multiple file uploads with this library?
AccessDenied
Invalid according to Policy: Policy Condition failed: ["starts-with", "$Content-Type", ""]
Following the installation instructions I get the above error from s3.
Reverting to
gem 'carrierwave_direct', '0.0.8'
corrects the issue.
I tried it with and without:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
include CarrierWave::MimeTypes
process :set_content_type
I have a form, uploader, DataMapper model, and S3 currently working together properly (if a bit slow), and I have the advantage of not needing to do any processing whatsoever. I simply want to upload files to S3, and I am done. My first question is simply if carrierwave_direct offers any benefit in this scenario.
If the answer is yes, my second question involves the minimum effort necessary to migrate from carrierwave to carrierwave_direct. For example, is it a requirement to create a direct_upload_form_for? I only ask because I have a complicated form using jQuery-File-Upload and potentially multiple files coming from multiple file input elements, and this form works off one of my domain models and not a particular instance of an uploader.
Any insight is appreciated.
Thanks.
Hi, I need help
My problem is that upload field not save in the db
db:sqlite3
Atte Ernesto De Unanue T
PD Im sorry for my English
The direct_fog_url
method in CarrierWaveDirect::Uploader
seems to only work for public S3 files. Can this work with files which are uploaded privately?
Hi, i am having a small problem uploading files to s3.
I have followed the instructions for installing and setting up carrierwave direct, however when i try to upload to s3 the upload begins and then freezes the upload at some point. Any thoughts?
Also sometimes i get this message from s3:
<Error>
<Code>InvalidPolicyDocument</Code>
<Message>
Invalid Policy: Invalid 'expiration' value: '2011-09-13T07:52:58+02:00'
</Message>
<RequestId>"some id"</RequestId>
<HostId>
"some host id"
</HostId>
</Error>
I have created an initializes file called carrierwave.rb with all my credentials from amazon s3. I have also loaded all the required gems(carrierwave_diirect, fog, carrierwave, nokogiri)
Checkout my code here
Been waiting a long time for a gem like this, thumbs up
Thank for for the help
Now that S3 Supports CORS could carrierwave_direct support direct uploading to s3 without a proxy?
I have a version namespace that should process conditionally some others versions.
class ArticleImage < ActiveRecord::Base
belongs_to :asset
belongs_to :article
before_save do
AssetVersionsWorker.perform_async(asset.id) if asset_id_changed? && !asset.illustrable
end
class AssetVersionsWorker
include Sidekiq::Worker
def perform(asset_id)
asset = Asset.find(asset_id)
asset.update_attribute(:illustrable, true)
# asset.image.cache_stored_file!
# asset.image.retrieve_from_cache!(asset.image.cache_name)
asset.image.recreate_versions!
end
end
end
# Encoding: utf-8
class AssetUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
include CarrierWave::MiniMagick
## Callbacks
before :cache, :capture_size_before_cache
## Versions
version :thumbnail do
process resize_to_fill: [70, 50]
end
version :content_thumb do
process :resize_to_fill => [140, 80]
end
version :actu, if: :is_illustrable? do
version :gabarit do
process :resize_to_limit => [650, 650]
end
version :big_banderolle do
process :crop
process :resize_to_fill => [610, 200]
end
version :banderolle do
process :crop
process :resize_to_fill => [300, 100]
end
version :big_slider do
process :resize_to_fill => [651, 334]
end
end
## Options
def url(options={})
super.split("?v=")[0]+"?v=#{model.updated_at.to_time.to_i}" rescue super
end
def store_dir
"uploads/assets"
end
def extension_white_list
%w(jpg jpeg gif png)
end
private
def capture_size_before_cache(new_file)
if model.width.nil?
model.width, model.height = `identify -format "%wx %h" #{new_file.path}`.split(/x/).map { |dim| dim.to_i }
end
end
def is_illustrable?(file)
return model.illustrable unless model.illustrable.nil?
end
def crop
if model.crop_x.present?
resize_to_limit(650, 650)
manipulate! do |img|
x = model.crop_x
y = model.crop_y
w = model.crop_w
h = model.crop_h
params = "#{w}x#{h}+#{x}+#{y}"
img.crop(params)
img.strip
img = yield(img) if block_given?
img
end
end
end
end
https://gist.github.com/6bf132c5647531517982 <- sidekiq log
or
1.9.3-p194 :005 > a = Asset.first
Asset Load (0.4ms) SELECT "assets".* FROM "assets" LIMIT 1
=> #<Asset id: 7, user_id: nil, name: "Michael Jordan1", image: "1bac3350-f35a-012f-e4af-001d7d080a4f/michael-jordan...", image_processed: true, crop_x: nil, crop_y: nil, crop_w: nil, crop_h: nil, width: 666, height: 481, illustrable: true, created_at: "2012-10-08 09:40:28", updated_at: "2012-10-08 09:40:40">
1.9.3-p194 :006 > a.image.recreate_versions!
TypeError: can't convert nil into String
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave_direct-0.0.7/lib/carrierwave_direct/uploader.rb:133:in `extname'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave_direct-0.0.7/lib/carrierwave_direct/uploader.rb:133:in `full_filename'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave-0.6.2/lib/carrierwave/uploader/store.rb:43:in `store_path'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave-0.6.2/lib/carrierwave/storage/fog.rb:83:in `store!'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave-0.6.2/lib/carrierwave/uploader/store.rb:59:in `block in store!'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave-0.6.2/lib/carrierwave/uploader/callbacks.rb:17:in `with_callbacks'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave-0.6.2/lib/carrierwave/uploader/store.rb:58:in `store!'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/carrierwave-0.6.2/lib/carrierwave/uploader/versions.rb:176:in `recreate_versions!'
from (irb):6
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
from /home/foohey/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
that happen only when recreating versions
From the Carrierwave::ActiveRecord module in the mount_uploader methods there is:
self.instance_eval <<-RUBY, __FILE__, __LINE__+1
attr_accessor :skip_is_attached_validations
attr_accessible :key, :remote_#{column}_net_url
RUBY
If I am correct (I am using mongoid so I have not verified it) the attr_accessible :key would not work for two uploaders in one model?
If so, are there any other areas where this holds true?
Hi
How would I get carriewave to process the uploaded files on a 3rd part cloud provided such as blitline?
Thanks!
This looks like an awesome gem but curious how to tie it into AR like the original carrierwave works. I'm guessing you would use the redirect_url somehow to persist the file's meta data to the DB. Any code examples/snippets appreciated. Thanks!
When i include the carrierwave_direct gem I get the following error:
stack level too deep
Full Trace
carrierwave_direct (0.0.2) lib/carrierwave_direct/mount.rb:8
mount.rb
uploader.class_eval <<-RUBY, __FILE__, __LINE__+1
def #{column}; self; end
RUBY
rails 3.1.0, ruby 1.9.2, carrierwave 0.5.8, carrierwave_direct 0.0.2
I'm using a standard uploader (as shown in the readme).
What am I doing wrong? Thanks in advance!
Currently, if a filename has square brackets "[" or "]" in it, the direct_fog_url method throws and error saying
URI::InvalidComponentError: bad component(expected absolute path component)
The solution is to replace this line:
uri.path = URI.encode(path)
with
uri.path = URI.escape(URI.escape(path),"[]")
in "def direct_fog_url(options = {})" in uploader.rb
Got local storage working with carrierwave 0.6.1. As soon as I add carrierwave_direct 0.0.5 to my gemset, without changing anything else, I get the following error. Adding the 'fog' gem, setting 'storage :fog', using version 0.0.4--nothing helps.
Started POST "/patients/101/documents" for 127.0.0.1 at 2012-04-04 15:43:13 -0700
Processing by Patients::DocumentsController#create as HTML
Parameters: {"utf8"=>"โ", "authenticity_token"=>"NMXO5l1kdcXpgDYbXZMtdz2fuDJKY+kTXJyFux/iEGw=", "document"=>{"description"=>"Document type 1", "location"=>#<ActionDispatch::Http::UploadedFile:0x000001022a7080 @original_filename="Portfolio Totals.csv", @content_type="text/csv", @headers="Content-Disposition: form-data; name="document[location]"; filename="Portfolio Totals.csv"\r\nContent-Type: text/csv\r\n", @tempfile=#File:/var/folders/W7/W7gnIpGEHbS8Tpkaf2MYDk+++TI/-Tmp-/RackMultipart20120404-52517-cw17h6>}, "commit"=>"Upload document", "patient_id"=>"101"}
User Load (0.3ms) SELECT users
.* FROM users
WHERE users
.id
= 65 LIMIT 1
Patient Load (1.4ms) SELECT patients
.* FROM patients
WHERE patients
.id
= 101 LIMIT 1
(0.6ms) BEGIN
(0.4ms) ROLLBACK
Completed 500 Internal Server Error in 95ms
NoMethodError (undefined method has_key?' for /uploads/tmp/20120404-1543-52517-5403/Portfolio_Totals.csv:LocationUploader): app/controllers/patients/documents_controller.rb:35:in
create'
class Patients::DocumentsController < ApplicationController
def create
@document = Document.new(params[:document])
if @document.save # THIS IS LINE 35
redirect_to patient_documents_path(@patient, :notice => "Document created.") and return
else
render :action => "new" and return
end
end
class Document < ActiveRecord::Base
belongs_to :patient
validates_presence_of :description
mount_uploader :location, LocationUploader
attr_accessible :patient_id, :description, :location
end
class LocationUploader < CarrierWave::Uploader::Base
def store_dir
"uploads/#{model.id}"
end
end
class CreateDocuments < ActiveRecord::Migration
def self.up
create_table :documents do |t|
t.references :patient
t.string :description, :limit => 40
t.string :location
t.timestamps
end
end
end
Hi - curious what the best way of getting file type and size using carrierwave_direct?
Hi,
How would one go about implementing unique file names.
In carrierwave one can just define
def filename
end
However, with carrierwave direct the file is being uploaded directly from the front end.
Any ideas?
After downloading a file:
def self.perform(user_id, avatar_key)
user = User.find(user_id)
user.key = avatar_key
user.remote_avatar_url = user.avatar.direct_fog_url(:with_path => true)
user.save!
end
How do you get the file that's saved in tmp? How do I reupload it back within a queue?
I've got an Avatar class with an AvatarUploader. The carrierwave attribute is Avatar.image. The files are in S3, and have 3 thumbnail versions.
I need to be able to "clone" avatars; this includes creating (or scheduling the creation of) a copy of the files in fog.
I have tried several variations of the following code, but none worked. Depending on the exact attributes I set, I get validation errors ("filename already taken" or "filename extension is not included on the accepted lists) or nil access errors.
class Avatar < ActiveRecord::Base
def duplicate(new_owner)
new_avatar = new_owner.build_avatar
new_avatar.remote_image_url = self.image_url
# also tried:
# new_avatar.remote_image_net_url = self.image_url
new_avatar.save!
end
Any ideas on how to crack this one? I'm starting to guess I will need to make a post to S3 at some point, but I'm unsure of where to do it.
We'd like to store in on the s3 in some organized and known fashion for deletions later on. Is this possible? Thanks
Hello there,
I'm able to upload images with carrierwave_direct the first time. But if I try to update them later on (change the image for another one), I get this S3 error:
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["starts-with", "$key", "uploads"]
</Message>
<RequestId>[...]</RequestId>
<HostId>[...]</HostId>
</Error>
My current setup is:
rails (3.2.12)
carrierwave (0.8.0)
carrierwave_direct (0.0.11)
fog (1.10.0)
Models:
class User < ActiveRecord::Base
has_one :avatar, :as => :avatar_owner
end
class Avatar < ActiveRecord::Base
belongs_to :avatar_owner, :polymorphic => true
mount_uploader :image, AvatarUploader
end
Uploader (simplified):
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
process :set_content_type
def extension_white_list
%w(jpg jpeg gif png)
end
end
Avatar form (I only allow creating avatars for existing users; when a user is created its avatar is nil):
<%= direct_upload_form_for @uploader do |f| %>
<%= f.file_field :image %>
<% end %>
Avatars controller:
class AvatarController
before_filter get_avatar
def edit
@uploader = @avatar.image
@uploader.success_action_redirect = url_for(['update_image', @avatar_owner,'avatar'])
end
# successful uploads redirect here
def update_image
@owner.build_avatar if @owner.avatar.nil?
@owner.avatar.key = params[:key] if params[:key]
redirect_to :owner
end
private
def get_avatar
owner_type = params[:type]
owner_model = owner_type.constantize
@avatar_owner = owner_model.find params[:id]
@avatar = @avatar_owner.avatar || Avatar.new(:avatar_owner_id => @avatar_owner.id, :avatar_owner_type => owner_type)
end
end
As a reminder: my problem is that I can upload an avatar image the first time, but any subsequent attempts at updating the image give me an error. I'd appreciate any help.
Thanks a lot!
It should be fixed to ignore case. Example: "JPG" is a valid extension.
This plugin should call the method check_whitelist
from carrierwave instead of creating its own, because in carrierwave fixes it 2 years ago.
It's just taken me far far too long to work out that when uploading to AWS I have to set @model.key = params[:key] in the success_action_redirect method.
The tests pass locally but fail with Travis CI. Pull requests welcome!
From the railscast and this document, I see how you would use carrierwave direct when you upload
the file to S3 first, and then create the object with the "key" value (from S3).
I would like to create the object first (saved to database) and then upload the file to S3.
My question is: how should I update the object with the returned key from S3?
Thanks
I needed to change my code to look like this:
self.remote_avatar_url = self.avatar.url.to_s
In rails when I call destroy
in my model that has a uploader mounted it does not remove the attachment from S3. Is a bug with my code or the plugin avoids it?
Thanks
Hi!
We're using i18n database backend and the use of a proc removes the compatibility with that gem. I've noticed the proc you're using is related to validating the filename and type.
Are you open to a refactor on that?
Cheers!
Currently the HTML form is confusing and incomplete:
<form action="https://s3-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="uploads/${filename}">
<input type="hidden" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="http://localhost/">
<input type="hidden" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED">
<input type="hidden" name="signature" value="YOUR_CALCULATED_SIGNATURE">
<input name="file" type="file">
<input type="submit" value="Upload to S3">
</form>
None of the above should be hard-coded. All of them should get from the values of uploader
, including the action link. There is also a missing hidden input field for utf8
too.
I no longer use CarrierWaveDirect in any projects, so I'm no longer a good person to help with maintenance. Is anyone interested?
@colinyoung are you interested?
I'm not sure if this is the place for questions, so please delete it if innapropriate. I just couldn't find a forum or another place that seemed better suited.
I'm uploading a user avatar with carrierwave, which works inside a regular form_for. So I get the avatar along with all the rest of the user info.
However, with carrierwave_direct, something like this would not work, since I would need to nest the direct_upload_form_for inside a form_for. Something like this:
<%= form_for @user, :html => { :multipart => true } do |f| %>
<%= f.error_messages %>
<%= f.label "What's your name?" %>
<%= f.text_field :name %>
<%= f.label "What's your birthday?" %>
<%= f.date_select :birthday %>
<%= direct_upload_form_for @uploader do %>
<%= f.label "Upload your avatar" %>
<%= f.file_field :avatar %>
<%= f.submit %>
<% end %>
<%= f.submit =>
<% end %>
Anyway to get around this? I would really love to avoid a flash uploader.
Thanks for the great gem! Hope I'm able to get it working on my scenario.
I'm having issues migrating my tests from CarrierWave
to CarrierWaveDirect
:
# user.rb
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
def full_name
return "#{first_name} #{last_name}"
end
end
# avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
# factories.rb
include CarrierWaveDirect::Test::Helpers
FactoryGirl.define do
factory :user do
first_name Faker::Name.first_name
last_name Faker::Name.last_name
key { sample_key AvatarUploader.new }
end
end
# user_test.rb
class UserTest < ActiveSupport::TestCase
test "derives full name" do
user = create :user
assert_equal "#{user.first_name} #{user.last_name}", user.name
end
end
RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
app/uploaders/avatar_uploader.rb:21:in `store_dir'
18: # Override the directory where uploaded files will be stored.
19: # This is a sensible default for uploaders that are meant to be mounted:
20: def store_dir
=> 21: "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
22: end
23:
24: # Provide a default URL as a default if there hasn't been a file uploaded:
The same exception is also reproducible in the console:
> include CarrierWaveDirect::Test::Helpers
> sample_key AvatarUploader.new
Getting this error on a new project I'm working with with CarrierWave.
Originates @:
carrierwave_direct-0.0.4/lib/carrierwave_direct/mount.rb:10
https://github.com/dwilkie/carrierwave_direct/blob/master/lib/carrierwave_direct/mount.rb
Using carrierwave (0.5.8).
https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb
Is it not comp with 0.5.8?
Thanks
I'm using a test fixtures like this https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Use-test-fixtures
but this raises an exception:
TypeError: can't convert nil into String
from /Users/a/.rvm/gems/ruby-1.9.3-p286-perf@nextprev/gems/carrierwave_direct-0.0.7/lib/carrierwave_direct/uploader.rb:133:in `extname'
Any ideas why?
I'm using carrierwave_direct 0.0.8 with rails 3.2.9 referred to carrierwave_direct_example.
Seems a file uploaded that the name contains special characters (i.e. 'รค', multi-byte characters and so on) raises this error.
The file can be saved, but when being updated, the error occurred from line 45 on carrierwave_direct/lib/carrierwave_direct/uploader.rb (the 'key' method).
So I've fixed this line:
# in the 'key' method
self.key = URI.parse(url).path # explicitly set key
to:
self.key = URI.parse(URI.encode(url)).path # explicitly set key
URI.encode did the trick for me.
Is there a proper way to fix this?
Thanks!
I can't make it work.
Using also Carrierwave 0.6.2.
Generated uploader class does not work from inside a Rails 3 standalone engine. What I did:
The generated file was created in app/uploaders/<file.rb>
The generated source had a Class ... end definition
Instantiating this class had all kinds of weird errors until I did the following:
I can't seem to figure out how to get this to work with polymorphic relationship. Thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.