【问题标题】:Capistrano + Carrierwave issueCapistrano + Carrierwave 问题
【发布时间】:2014-09-19 09:58:00
【问题描述】:

我对 Carrierwave 和 Capistrano 有疑问。情况是:

  • 我已将 Capistrano 设置为仅保留一个版本。 (测试提案)。
  • 当前版本指向 20140918231215。
  • Capistrano 可以选择:

    set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets tmp/sessions public/uploads}

因此,当前的公共/上传内容与共享/公共/上传内容相关联,这没关系。当我上传新文件时出现此问题。在这种情况下,会在发布之前的文件夹中创建一个新文件夹。

有什么方法可以刷新 Capistrano Uploader store_dir,我怀疑这是一个错误的配置。

注意事项:

  • 从 last_release 到 shared 的新符号链接已正确创建。
  • 之前的版本被正确删除了。
  • 问题是当我上传新图像时,它是在 before_release/public/uploads 中创建的。该文件夹不存在,因此显然它是在没有符号链接的情况下创建的。

非常感谢您提供的任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby capistrano carrierwave


    【解决方案1】:

    如果您服务器中的文件夹已正确符号链接,则 capistrano 工作正常。

    在我看来,您的问题是您的上传者做错了事。

    检查store_dir 方法,可能正在做一些疯狂的事情: 我的看起来像这样:

    class LogoUploader < CarrierWave::Uploader::Base
      include CarrierWave::RMagick
      storage :file
    
      def store_dir
        "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
      end
    end
    

    考虑到默认情况下,carrierwave 已经使用公用文件夹。

    【讨论】:

      【解决方案2】:

      我已经通过在部署后执行“sudo service nginx restart”来实现写入新文件夹(最新版本),我认为这是不必要的,是吗?

      编辑:

      我明白了!我已将该行添加到 config/deploy.rb:

      namespace :deploy do
        desc "Restart"
        task :restart do
          on roles(:web) do
            execute "touch #{release_path}/tmp/restart.txt"
          end
        end
      end
      

      我还将文件 restart.txt 添加到 tmp 文件夹中。

      这似乎是通过 Phusion Passenger 重新启动 Ruby on Rails 的“技巧”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 2014-07-07
        • 2014-05-30
        • 1970-01-01
        • 2014-06-13
        相关资源
        最近更新 更多