设置系统目录Rails生产环境

时间:2012-10-08 09:41:02

标签: ruby-on-rails paperclip capistrano

我的应用程序在我的开发机器上工作正常,但在我的生产服务器上,它使用断开的链接来提供使用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

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

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

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

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

如何设置它以便Paperclip使用正确的路径并仅使用它生产?

2 个答案:

答案 0 :(得分:1)

我有一个解决方法,将其添加为初始化程序之一 配置/初始化/ 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

答案 1 :(得分:0)

目前,Paperclip无法与ENV['RAILS_RELATIVE_URL_ROOT']和{{1}}一起使用。您可以在此处关注此问题: https://github.com/thoughtbot/paperclip/issues/889