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