0

我有一个在我的开发机器上运行良好的应用程序,但在我的生产服务器上,它使用断开的链接来提供使用 Paperclip Gem 提供的图像。

生产环境是 Linux(Debian)、Apache、Passenger,我正在使用 Capistrano 进行部署。

该应用程序存储在(指向使用 capistrano 部署的应用程序当前版本的公共文件夹的符号链接):

/var/www/apps/root/appname

但是,当我尝试在生产服务器上访问它时,Apache 错误日志将其显示为它正在查找的路径:

/var/www/apps/root/system

然而,正确的路径是:

/var/www/apps/appname/shared/system

我可用的一个选项是在根目录中创建一个符号链接,将系统引导到正确的路径,但我不想这样做,以防我想在同一个根目录中部署另一个应用程序。

这个请求的 url 是由 rails 生成的,但是 Apache 是获取静态资源(图像文件)的,所以我尝试在我的 config/environments/production.rb 中放置以下内容:

ENV["RAILS_RELATIVE_URL_ROOT"] = '/appname/'

这解决了我遇到的所有其他路径问题,但是当 rails 生成 url(通过 Paperclip gem)时,它似乎没有使用它。

我该如何设置它以便 Paperclip 使用正确的路径并且只使用它生产?

4

2 回答 2

1

我有一个解决方法,将其添加为初始化程序之一:

config/initializer/paperclip.rb

Paperclip::Attachment.class_eval do 
  
  def url(style_name = default_style, options = {})
    if options == true || options == false # Backwards compatibility.
      res = @url_generator.for(style_name, default_options.merge(:timestamp => options))
    else
      res = @url_generator.for(style_name, default_options.merge(options))
    end
    # replace adding uri before res, minus final /
    Rails.application.config.site_relative_url[0..-2]+res
  end
  
end
于 2016-03-23T04:16:28.393 回答
0

目前 Paperclip 不能与ENV['RAILS_RELATIVE_URL_ROOT']and 一起使用。您可以在此处关注问题: https ://github.com/thoughtbot/paperclip/issues/889

于 2013-04-10T17:53:33.580 回答