【问题标题】:Getting S3 Credentials from the database at startup in rails在 Rails 中启动时从数据库中获取 S3 凭据
【发布时间】:2013-06-07 09:56:58
【问题描述】:

结合使用 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 文件夹中)

【问题讨论】:

标签: ruby-on-rails activerecord configuration amazon-s3 paperclip


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2014-05-03
    • 2020-10-27
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多