Ruby on rails 如何从控制台访问RubyonRails.root.joinYML文件?

Ruby on rails 如何从控制台访问RubyonRails.root.joinYML文件?,ruby-on-rails,pathname,Ruby On Rails,Pathname,我将数据存储在以下文件中:猜猜它是什么数据?:) 为了确认它是否正常工作,我启动了rails控制台,发现S3_凭证是一个路径名对象。但我很难确认数据是否存在。例如,我将如何访问bucket数据 Loading development environment (Rails 3.1.0.beta1) >> S3_CREDENTIALS.isdir NoMethodError: undefined method `isdir' for #<Pathname:0x10212f6f8&g

我将数据存储在以下文件中:猜猜它是什么数据?:)

为了确认它是否正常工作,我启动了rails控制台,发现S3_凭证是一个路径名对象。但我很难确认数据是否存在。例如,我将如何访问bucket数据

Loading development environment (Rails 3.1.0.beta1)
>> S3_CREDENTIALS.isdir
NoMethodError: undefined method `isdir' for #<Pathname:0x10212f6f8>
    from (irb):1
>> S3_CREDENTIALS.size
=> 282
>> S3_CREDENTIALS.data
NoMethodError: undefined method `data' for #<Pathname:0x10212f6f8>
    from (irb):3
>> S3_CREDENTIALS[:bucket]
NoMethodError: undefined method `[]' for #<Pathname:0x10212f6f8>
    from (irb):4
>> 
加载开发环境(Rails 3.1.0.beta1)
>>S3_.isdir
NoMethodError:未定义的方法“isdir”#
来自(irb):1
>>S3_.size
=> 282
>>S3_凭证数据
NoMethodError:未定义的方法“data”#
来自(irb):3
>>S3_凭证[:bucket]
NoMethodError:的未定义方法“[]”#
来自(irb):4
>> 

另一方面,如果我将文件从s3.yml更改为s3.json,这是否仍然有效?

如果您将其用作带有回形针的s3存储,则希望将其保留为yml。在初始值设定项(配置/初始值设定项)中创建一个名为:

app_config.rb

AppConfig = YAML.load(File.read(Rails.root + 'config' + 'config.yml'))[Rails.env].with_indifferent_access
所有s3内容的配置应采用以下格式:

config.yml

development:
  s3:
    access_id: access-id
    secret_key: secret
    bucket_name: your-bucket-name-for-development
staging:
  s3:
    access_id: access-id
    secret_key: secret
    bucket_name: your-bucket-name-for-staging
production:
  s3:
    access_id: access-id
    secret_key: secret
    bucket_name: your-bucket-name-for-production
此时,您应该能够进入控制台并通过输入以下命令访问s3数据:

AppConfig[:s3]
您应该得到一个哈希值,其中包含所有数据,如:

{"access_id"=>"access-id", "bucket_name"=>"your-bucket-name-for-development", "secret_key"=>"secret"}
如果您想在开发中测试s3,我就以上面的内容为例,但通常您只需要在开发中保存到本地文件目录,并将s3用于远程登台和生产环境

访问bucket数据是一个不同的对话,取决于您如何将bucket数据关联到您的模型。例如,如果您的桶数据与照片模型关联,如下所示:

photo.rb

require 'paperclip'

class Photo < ActiveRecord::Base
  belongs_to :album
  before_save :set_orientation

  if AppConfig['s3']
    has_attached_file :data, 
      :styles => { 
        :thumb => "200x200>",
        :medium => "700x700>" 
      },
      :storage => :s3, 
      :default_style => :medium,
      :bucket => AppConfig['s3']['bucket_name'],
      :s3_credentials => { :access_key_id => AppConfig['s3']['access_id'], :secret_access_key => AppConfig['s3']['secret_key'] },
      :s3_headers => { 'Cache-Control' => 'max-age=315576000', 'Expires' => 10.years.from_now.httpdate },
      :path => "/:class/:id/:style/:filename"
  else
    has_attached_file :data,
      :styles => { 
        :thumb => "200x200>",
        :medium => "700x700>"
      },
      :storage => :filesystem, 
      :default_style => :medium
  end

  private
  def set_orientation
    self.orientation = Paperclip::Geometry.from_file(self.data.to_file).horizontal? ? 'horizontal' : 'vertical'
  end
end
这将为返回的第一个photo对象提取缩略图存储的S3URL。上述示例还使用了“回形针”gem和“aws-s3”gem

config.gem 'aws-s3', :version => '>=0.6.2', :lib => 'aws/s3'
config.gem 'paperclip'
希望这有助于你的道路

Photo.first.data(:thumb)
config.gem 'aws-s3', :version => '>=0.6.2', :lib => 'aws/s3'
config.gem 'paperclip'