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