我正在尝试在 Warbler (Tomcat) 和/或 Torquebox 4 (Wildfly) 的帮助下使用 .war 文件在 jRuby 上部署 Rails。我面临的问题是,在这种情况下,我不知道如何使用 Carrierwave 或 Paperclip 处理上传。 理想情况下,上传应存储在 war 之外,因为它可能随时被更新版本的应用程序替换。 在将应用程序作为 war 文件打包到/home/username/uploads(权限设置为 777)目录之前,我尝试在公共(public)目录中创建一个符号链接(symbolic link)(上传),但这不起作用(我收到 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 文件中包含一个指向上传文件夹的符号链接(symbolic link),但没有成功。我尝试在运行 warble war 之前以及在将应用程序部署到 Tomcat(在 app_name 文件夹内)之后创建它。
知道如何解决这个问题吗?
更新 2 我在这里找到了一个可行的解决方案: Configure Symlinks for single directory in Tomcat
简而言之:
cd 进入 tomcat 创建的 exploded war 目录(你可以在 tomcat/webapps 下找到它)(如果上传的 war 文件的名称是 yourapp.war 那么目录名称将是 Tomcat 8 中的 yourapp )。
使用 sudo mkdir uploads
创建上传文件夹
创建挂载点:sudo mount --bind/path/to/actual/upload/directory/uploads uploads
我还没有用 Wildfly 测试过这个,但我会在今天晚些时候或明天进行测试。如果我没记错的话默认情况下它不会自动爆破war文件。
不过,我仍然想知道针对该问题的其他、更简单、不同的解决方案,以及对我找到的解决方案的看法。
最佳答案
只是对不同方法的思考......
使用“基于云”的存储服务将使 Assets 的上传和服务问题消失,如果您需要第二个节点,它还可以更简单地扩展应用程序,
它还会减少扩展应用程序的需要,因为您可以有效地将 ruby 传统上处理不当的大数据操作委托(delegate)给不同的服务
Amazon S3是一个明显的选择,but check out Riak too
关于ruby-on-rails - 部署为 .war 文件时如何处理 Rails 中的上传和日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28535802/