部署为.war文件时如何处理Rails中的上传和日志?

时间:2015-02-16 06:39:32

标签: ruby-on-rails logging upload jruby torquebox

我试图在Warbler(Tomcat)和/或Torquebox 4(Wildfly)的帮助下使用.war文件在jRuby上部署rails。我面临的问题是,在这种情况下,我不知道如何使用Carrierwave或Paperclip处理上传。 理想情况下,上传应该存储在战争之外,因为它可能随时被更新版本的应用程序取代。 在我将应用程序打包为war文件到/ home / username / uploads(权限设置为777)之前,我尝试在公共目录中创建一个符号链接(上传),但这不起作用(我得到500误差)。

在部署war文件后,如何访问production.log?或者我应该在哪里放置日志?

更新 我想出了如何配置Carrierwave来存储war文件之外的上传内容:

if Rails.env.development?
    CarrierWave.configure do |config|
      config.root = "/Users/Username/username_uploads/uploads"
    end
elsif Rails.env.production?
    CarrierWave.configure do |config|
      config.root = "/home/username/username_uploads/uploads"
    end
end

现在Carrierwave上传文件没有问题,但是当我尝试查看它时出现404错误。 我试图在war文件中包含一个符号链接到uploads文件夹,但没有成功。我试图在运行warble war之前创建它,也在将应用程序部署到Tomcat之后(在app_name文件夹中)。

知道如何解决这个问题吗?

更新2 我找到了一个有效的解决方案: Configure Symlinks for single directory in Tomcat

简而言之: cd进入tomcat创建的爆炸的war目录(你可以在tomcat / webapps下找到它)(如果上传的war文件的名称是yourapp.war,那么目录名将是Tomcat 8中的yourapp)。 使用sudo mkdir uploads创建上传文件夹 创建挂载点:sudo mount --bind /path/to/actual/upload/directory/uploads uploads

我还没有用Wildfly对此进行测试,但我会在今天或明天稍后进行测试。如果我没记错的话,默认情况下它不会自动爆炸war文件。

我仍然想知道更多,更简单,不同的问题解决方案,以及对我找到的解决方案的意见。

4 个答案:

答案 0 :(得分:1)

只是在不同的方法上思考...

使用"基于云的"存储服务会使资产问题的上传和服务消失,如果您需要第二个节点,它还可以简化应用程序的扩展,

它还可以减少扩展应用程序的需要,因为您可以有效地将ruby传统上处理不当的大型数据操作委托给不同的服务

Amazon S3是一个明显的选择,but check out Riak too

答案 1 :(得分:1)

默认情况下,Tomcat不遵循符号链接(由于安全原因)。要启用此功能,您必须在Host的{​​{1}}标记内添加以下内容:

server.xml

请参阅docs和最新的migration guide

答案 2 :(得分:1)

我认为您遇到此问题时遇到的问题:

if Rails.env.development?
    CarrierWave.configure do |config|
      config.root = "/Users/Username/username_uploads/uploads"
    end
elsif Rails.env.production?
    CarrierWave.configure do |config|
      config.root = "/home/username/username_uploads/uploads"
    end
end

是您将图像存储在rails公用文件夹之外,因此rails不再能够为它们提供服务。 Carrierwave正在按照您的预期正确上传所有内容,并创建相对于存储目录的链接。 如果您使用默认的#{Rails.root} / public storage,则rails会为您的图像提供服务,因为提供的是公共内容(也是静态HTML或其他资源)。由于Rails不再服务于它们,所以由你来服务它们。

也许你可以直接通过Tomcat为他们服务(因为我没有Tomcat配置方面的专业知识,你必须自己解决这个问题)。这可能会更快,因为请求超过了rails堆栈。

答案 3 :(得分:-1)

如果您可以提供日志,那么诊断问题会更容易(我认为这个问题仅在生产中,因为您询问如何访问该日志?)。转到rails应用程序目录并查看log/production.log这些日志级别通常较低,因此您可能必须将它们配置为提供更多信息config/enviroments/prouction.rb应该有config.log.level这可能设置为{{ 1}}将其设置为info以获得更详细的日志记录。