rails-settings gem と paperclip の組み合わせを使用して、(フロントエンドのインターフェイスを介して) データベースで S3 資格情報を指定し、次のように添付ファイルを宣言できるようにアプリケーションをセットアップしました。
class Asset < ActiveRecord::Base
has_attached_file :attachment,
:default_url => "content/no-img.jpg",
:s3_credentials => {
:access_key_id => Settings.AWS_ACCESS_KEY_ID,
:secret_access_key => Settings.AWS_SECRET_ACCESS_KEY
}
これはうまく機能しますが、アプリケーションの添付ファイルの種類はこれだけではありません (クライアントのロゴなど、他にもあります)。すべてに S3 資格情報を指定する必要があることがわかりました。アプリの構成ファイルにいくつかのデフォルトをすでに隠しています。
class Application < Rails::Application
#Paperclip Defaults
config.paperclip_defaults =
{
:storage => :s3,
:bucket => "my-bucket-name"
}
これはすべてうまく機能しますが、ユーザー名とパスワードをアプリ構成にプルダウンしようとすると、次のエラーが発生します。
ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished)
かなり自明なエラー メッセージですが、どうすれば回避できますか? 構成を環境ファイルに入れると、同じ問題が発生します。それらを次のような初期化子に入れると、次のようになります。
#Paperclip Defaults
MyApp::Application.config.paperclip_defaults =
{
:storage => :s3,
:bucket => "my-bucket-name",
:s3_credentials => {
:access_key_id => RailsSettings::Settings.AWS_ACCESS_KEY_ID,
:secret_access_key => RailsSettings::Settings.AWS_SECRET_ACCESS_KEY
}
}
その後、値が取得されないようで、ペーパークリップはデフォルトでローカルシステムディレクトリにファイルを保存するように戻ります。これを処理するための最良のアプローチについて誰かアドバイスできますか?
編集
ドキュメントを読み直した後、「After Initializers」を発見しました。アプリの設定にこれがあります。
config.after_initialize do
#Paperclip Defaults
config.paperclip_defaults =
{
:storage => :s3,
:bucket => "my-bucket-name",
:s3_credentials => {
:access_key_id => RailsSettings::Settings.AWS_ACCESS_KEY_ID,
:secret_access_key => RailsSettings::Settings.AWS_SECRET_ACCESS_KEY
}
}
end
そして、これを各モデルで指定します。
has_attached_file :attachment,
:default_url => "content/no-img.jpg",
:path => "#{Rails.env}/:client_name/#{DateTime.now.year}/:name/:basename/:basename-:style.:extension"
それでも、私が指定したデフォルトをまだ取得していません (それでも public/system フォルダーに配置しようとします)。