每次部署后,Paperclip文件都会被删除

Joe*_*ano 4 git deployment assets ruby-on-rails paperclip

我使用Paperclip gem来存储图片,而在localhost上它可以很好地工作.但是,我添加到我的实时应用程序的任何图片在每次部署后都会被删除.

我使用Git进行部署.这是我的部署过程:

$ bundle exec cap production deploy
$ ssh root@xx.xxx.xx.xxx
$ chmod -R 777 /rails_apps/app/releases
$ cd /rails_apps/app/current
$ cp config/database.yml.sample config/database.yml
$ RAILS_ENV=production bundle exec rake assets:precompile
$ /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)

有没有其他人遇到这样的事情?


更新:

这不是重复的,因为这个问题的答案是将此行添加到我的deploy.rb:

set :linked_dirs, fetch(:linked_dirs, []).push('public/system')
Run Code Online (Sandbox Code Playgroud)

导致Paperclip完全破裂.以前我遇到过无法使用Paperclip添加图片的问题,导致此错误:

Errno::EACCES in UsersController#update
Permission denied - /rails_apps/website/releases/20150807211111/public/system/users/avatars/000/000/562
Run Code Online (Sandbox Code Playgroud)

但是在我的服务器上运行此命令会修复权限:

chmod -R 777 /rails_apps/website/releases
Run Code Online (Sandbox Code Playgroud)

但是,如上所示修改我的deploy.rb文件会导致chmod -R 777命令不再起作用,并且我再次无权添加图像,从而导致相同的"Permission denied"错误.

所以这个问题不能为我的问题提供有效的解决方案.

MZa*_*oza 5

存储图像的最佳方式是像SWS Secure,Durable和Highly-Scalable Object Storage这样的地方

设置它真的很简单

# Gemfile
gem 'paperclip'
gem 'aws-sdk 
Run Code Online (Sandbox Code Playgroud)

在config/environments/production.rb中

# config/environments/production.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['S3_BUCKET_NAME'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您在上传图片时遇到问题,请阅读以下两个配置部分.

如果仍有问题,请参阅Paperclip文档页面以获取详细的配置选项.

要覆盖默认URL结构并将存储桶的名称"domain-style"放在URL中(例如your_bucket_name.s3.amazonaws.com).这些选项可以放在上面显示的paperclip_defaults配置哈希中,也可以放在初始化程序中.

#config/initializers/paperclip.rb
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com'
Run Code Online (Sandbox Code Playgroud)

我希望这个对你有用.

快乐的黑客