1

Carrierwave を使用してテキスト ファイルを Rackspace にアップロードしていますが、これは機能しています。私のセットアップは本当に標準的です:

アップローダ:

class FileUploader < CarrierWave::Uploader::Base
  include CarrierWave::MimeTypes

  storage :fog

  def store_dir
    "/my/local/path"
  end
end

モデル:

class UploadedFile < ActiveRecord::Base
  attr_accessible :file

  mount_uploader :file, FileUploader
end

Carrierwave 初期ファイル:

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider           => "Rackspace",
    :rackspace_username => "xxxxx",
    :rackspace_api_key  => "yyyyy"
  }
  config.fog_directory = "my_container"
  config.fog_host = "http://c000000.cdn.rackspacecloud.com"
  config.fog_public = false
end

フォームからファイルをアップロードするのではなく、遅延ジョブを使用してバックグラウンド プロセスでファイルを生成し、それを Rackspace にアップロードしています。

file = File.new("/my/local/path/some_text_file.txt", "r")
uploaded_file = UploadedFile.new
uploaded_file.file = file
uploaded_file.save

ここまでは、すべて問題ありません。Rackspace アカウントで自分のファイルを確認できます。また、モデルが保存され、uploaded_files テーブルにレコードがあることもわかります。

私の問題はファイルの取得です。私は次のことを試みました:

downloader = FileUploader.new
downloader.retrieve_from_store!("some_text_file.txt")

私はretrieve_from_storeに気づきました!実際にはファイルをダウンロードしません。ただし、次に来るものは次のとおりです。

downloader.cache_stored_file!

しかし、前の呼び出しから何も取得されていないため、その行は壊れています。

以下は奇妙な出力を生成するため、ダウンロードで根本的に間違ったことをしていると思います。

f = UploadedFile.first
f.file.url

"/my/local/path/some_text_file.txt"

私が見たすべての例に基づいて、f.file.url が Rackspace CDN url を返すことを期待します。しかしそうではなく、代わりに store_dir パスを返します。

編集

UploadedFile モデルの基礎となるテーブルには「ファイル」という名前の列があり、これにはファイルのベース名のみが含まれており、Rackspace クラウド ファイルへの URL やフル パスは含まれていないことに注意してください。これは問題の一部である可能性があります...

4

1 に答える 1

0

ファイルへのパブリック アクセスを有効にするように、RackSpace アカウントを構成したことを確認してください。Cloud / FilesContainersの下で、設定を編集して CDN を有効にします。その後、CarrierWave::Uploader.url から公開リンクが利用可能になります。

于 2016-10-17T17:14:08.893 に答える