我试图在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文件。
我仍然想知道更多,更简单,不同的问题解决方案,以及对我找到的解决方案的意见。
答案 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
以获得更详细的日志记录。