2013-10-22 64 views
0

我正在試圖獲得一個簡單的圖像上傳類和Carrierwave一起在Sinatra工作。我用幾乎相同的代碼,這一點,並指定在Gemfile中相同的路線,但在運行$包安裝後,一切都沒有問題,安裝,我從下面的代碼LoadError:Sinatra&Carrierwave:在`require'中:無法加載這樣的文件 - RMagick(LoadError)

的Gemfile:

source 'https://rubygems.org' 

ruby '1.9.3' 

gem 'sinatra' 
gem 'sinatra-contrib' 
gem 'rack' 
gem 'thin' 
gem "mongo_mapper" 
gem 'bson_ext' 

# Image uploading to S3 
gem "fog", "~> 1.3.1" 
gem 'carrierwave' 
gem 'rmagick', '2.13.2', :git=>'http://github.com/rmagick/rmagick.git', :require=>'RMagick' 

CarrierWave配置文件:

# Configure Carrierwave Uploads to Amazon S3 
CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS',      # required 
    :aws_access_key_id  => '(never mind about this)',      # required 
    :aws_secret_access_key => '(or this)'      # required 
    #:region     => 'eu-west-1',     # optional, defaults to 'us-east-1' 
    #:host     => 's3.example.com',    # optional, defaults to nil 
    #:endpoint    => 'https://s3.example.com:8080' # optional, defaults to nil 
    } 
    config.fog_directory = 'penumbra-images'      # required 
    config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {} 

end 

ImageUploader類定義:

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 
    process :resize_to_fit => [1024, 1024] 
    storage :fog 
end 

我的結果:

$ ruby app.rb 
CarrierWave::Uploader::Base 
/Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:124:in `require': cannot load such file -- RMagick (LoadError) 
    from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:124:in `require' 
    from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/carrierwave-0.9.0/lib/carrierwave/processing/rmagick.rb:67:in `rescue in block in <module:RMagick>' 
    from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/carrierwave-0.9.0/lib/carrierwave/processing/rmagick.rb:64:in `block in <module:RMagick>' 
    from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.2.14/lib/active_support/concern.rb:121:in `class_eval' 
    from /Users/duncanmalashock/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.2.14/lib/active_support/concern.rb:121:in `append_features' 
    from /Users/duncanmalashock/Generator/init/uploader.rb:2:in `include' 
    from /Users/duncanmalashock/Generator/init/uploader.rb:2:in `<class:ImageUploader>' 
    from /Users/duncanmalashock/Generator/init/uploader.rb:1:in `<top (required)>' 
    from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:124:in `require' 
    from /Users/duncanmalashock/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:124:in `require' 
    from app.rb:7:in `<main>' 

任何人都可以幫忙嗎?非常感謝。

回答

2

在你Gemfile您指定RMagick的Git版本。 Bundler需要一些特殊的步驟來將這些庫添加到Ruby的加載路徑中,但是在沒有Bundler的情況下運行時它們不可用,因爲它們不是普通的gem。當您在沒有Bunder的情況下運行應用程序ruby app.rb時,Bundler無法將此項目添加到加載路徑,因此您會收到LoadError。

爲了解決這個問題,請確保您使用捆紮機運行你的應用程序:

$ bundle exec ruby app.rb 

或者你可以設置捆紮機在你的代碼。添加

require 'bundler/setup' 

app.rb的頂部,Bundler將在您每次運行時設置。

+0

非常感謝,@matt!我有一個不同的問題,但你的答案爲我節省了幾個小時。 –

相關問題