开发者

Rails Paperclip conflict between aws-s3 gem and right_aws gem. How to solve?

for a new App I want to use paperclip to store Files to S3. I already have installed the aws-s3 gem for another app. That seems to cause some problems, because Paperclip should use right_aws but is trying to use the aws-s3 gem. But I don't want to remove the aws-s3 gem from my system. Is there a way to solve this conflict? Maybe by forcing paperclip to use right_aws? Or b开发者_如何学Pythony changing the configuration?

My setup

# enviroment.rb
config.gem 'right_aws'

# my model with the attachment
has_attached_file :thumbnail, 
    :styles => { :thumb => "160x120>" },
    :storage => :s3,
    :s3_credentials => "#{RAILS_ROOT}/config/amazons3.yml",
    :path => ":provider/:attachment/:id_:style.:extension"

# config/amazons3.yml
development:
  bucket: bucketname
  access_key_id: secret
  secret_access_key: secret

test:
  bucket: bucketname
  access_key_id: secret
  secret_access_key: secret

production:
  bucket: bucketname
  access_key_id: secret
  secret_access_key: secret

# The Error in the console
ArgumentError: wrong number of arguments (5 for 4)
    from /Library/Ruby/Gems/1.8/gems/right_http_connection-1.2.4/lib/net_fix.rb:85:in `send_request_with_body_stream'
    from /Library/Ruby/Gems/1.8/gems/right_http_connection-1.2.4/lib/net_fix.rb:85:in `exec'
    from /Library/Ruby/Gems/1.8/gems/right_http_connection-1.2.4/lib/net_fix.rb:144:in `request'
    from /Library/Ruby/Gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/connection.rb:45:in `request'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:543:in `start'
    from /Library/Ruby/Gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/connection.rb:52:in `request'
    from /Library/Ruby/Gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:69:in `request'
    from /Library/Ruby/Gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:88:in `put'
    from /Library/Ruby/Gems/1.8/gems/aws-s3-0.6.2/lib/aws/s3/object.rb:241:in `store'
...

Thanks!


Wow, that was fast. I solved the issue by just using the aws-s3 gem and therefore changing my enviroment.rb to read:

#config.gem 'right_aws'
config.gem "aws-s3", :version => ">= 0.6.2", :lib => "aws/s3"

Hope that helps somebody!


Not long ago Amazon released official AWS SDK for Ruby. It works pretty well with S3, supports American, European and Japanese S3 instances from the box and well maintained.

I have created a storage module for Paperclip called paperclip-aws to works with AWS SDK.

Feel free to use it. I hope that it will help.


I had this problem also. Specifying the gems in a certain order seems to work for some people:

config.gem "aws-s3", :lib => "aws/s3", :version => '>= 0.6.2'
config.gem "paperclip", :version => '>= 2.3.1.1'
# config.gem "right_aws"

In my app I also had a plugin (backup_fu) specifying right_aws as well, and I had to comment out the line in my plugin as well:

# backup_fu.rb
require 'yaml'
require 'active_support'
require 'mime/types'
require 'right_aws' unless defined?(RightAws)
require 'erb'

class BackupFuConfigError < StandardError; end
class S3ConnectError < StandardError; end

class BackupFu
  # etc...
end

Does anyone know why this is an issue?

EDIT: In my app I no longer require right_aws at all, and then in the backup_fu gem I changed the require line to only require right_aws if it's not already loaded. I found that by requiring the gem in environment.rb, it caused a conflict with the aws-s3 gem. So now the backup_fu plugin will load it if required (usually only when running as a rake task), but not when the app is started up.


The main issue here is that aws-s3 redefines a method called send_request_with_body_stream.

aws-s3's version has 4 arguments, and right_http_connection's has 5. Depending on load order, aws-s3 can redefine right_http_connection's version of that method.

I cloned right_http_connection and made a quick fix for this issue. I sent a pull request to right_http_connection.

Therefore you can use my git repo in your bundle to fix this issue:

gem 'right_http_connection', :git => "git://github.com/gammons/right_http_connection"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜