3

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

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

更新 我想出了如何配置 Carrierwave 以将上传存储在战争文件之外:

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 测试过这个,但我会在今天晚些时候或明天。如果我没记错的话,默认情况下它不会自动分解战争文件。

不过,我仍然想知道针对该问题的其他、更简单、不同的解决方案,以及对我找到的解决方案的看法。

4

4 回答 4

1

只是在不同的方法上深思熟虑......

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

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

Amazon S3是一个显而易见的选择,但也请查看 Riak

于 2015-08-11T10:07:00.680 回答
1

默认情况下,Tomcat 不遵循符号链接(出于安全原因)。Host要启用此功能,您必须在您的标签内添加以下内容server.xml

<!-- Tomcat 7: -->
<Context allowLinking="true" />

<!-- Tomcat 8: -->
<Context>
  <Resources allowLinking="true" />
</Context>

请参阅文档和最新的迁移指南

于 2015-08-11T15:08:14.943 回答
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 存储,rails 会为您的图像提供服务,因为任何来自公共的内容都会被提供(也包括静态 html 或其他资产)。由于 Rails 不再提供这些服务,因此由您来提供服务。

也许您可以直接通过 Tomcat 为它们提供服务(因为我没有 Tomcat 配置方面的专业知识,您必须自己弄清楚)。这可能会更快,因为请求超过了 rails 堆栈。

于 2015-08-12T17:53:26.743 回答
-1

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

于 2015-08-10T01:01:11.520 回答