0

使用 rails-settings gem 和回形针的组合,我设置了我的应用程序,以便可以在数据库中指定 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
  }
}

然后这些值似乎没有被拾取,回形针默认将文件存储在我的本地系统目录中。任何人都可以就处理此问题的最佳方法提出建议吗?

编辑

因此,在重新阅读文档后,我发现了“初始化程序之后”,它解决了整个活动记录未加载的问题。我的应用程序配置中有这个;

 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 文件夹中)

4

1 回答 1

1

对了,排序。如果有人有这个问题,这里是解决方案(您基本上需要在设置配置之前使用“initializers”方法打开活动记录);

initializer "active_record.initialize_database" do |app|
  app.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
于 2013-06-07T10:20:08.793 回答