MY CODE BASE SETUP:
我的问题:事情“看似”在本地机器上工作(没有硬错误)但不在生产中工作。我相信我的问题与将正确的信息发送到ruby file.open()
命令有关。
我的生产(登台)服务器上收到以下错误:
Errno :: ENOENT in Projects#show 显示/app/app/views/projects/show.html.erb第276行:
没有这样的文件或目录@ rb_sysopen - https://[bucketname].s3.amazonaws.com/path/to/instance/of/file/file_name.stl
但如果我将生成的超链接复制/粘贴到我的网络浏览器中,则会提示文件打开/下载菜单。我在这里做错了什么?
背景/历史:
我无法解决问题,而且我已经搜索了很多寻求答案的stackoverflow问题:
我在我的“项目模型”(project.rb)中定义了以下方法,该方法从特定实例获取项目文件,从“project_file path”输入中,gem解析了我的webapp的STL文件。
这个特殊的gem - “STL_parser” - 调用file.open(filepath,'rb')命令,这是我相信我的应用程序遇到问题的地方。这是我在我的模型中调用的方法,它调用STL_parser gem:
def analyze_STL project_file
if Rails.env.development? || Rails.env.test?
full_path = project_file.current_path
else
full_path = project_file.url.to_s
end
parser = STLParser.new
parser.process(full_path)
end
每个案例和环境的结果如下:
在发展中:
project_file.current_path
...对于我的mac上的一个特定实例产生:
/Users/myname/full/path/to/file/on/laptop/unique_instance_file.stl
结果:应用程序适用于本地计算机。如果我将上述路径复制/粘贴到Chrome等网络浏览器中,则会提示文件打开/下载菜单。
在生产环境中:
project_file.current_path
结果:
Errno :: ENOENT错误 - 没有这样的文件或目录@ rb_sysopen -uploads /项目/ project_file /实例/ instance_file.stl
并且显然缺少子域,因此在Production中,我修改了从AWS调用文件URL的路径,如上所示:
project_file.url.to_s
https://[bucketname].s3.amazonaws.com/path/to/instance/of/file/file_name.stl
结果:
Errno :: ENOENT错误 - 没有这样的文件或目录@ rb_sysopen - https://[bucketname].s3.amazonaws.com/path/to/instance/of/file/file_name.stl
...但如果我将该路径复制/粘贴到我的网络浏览器中,该文件将提示打开/下载菜单。
因此,路径似乎指向文件的正确,但file.open()
命令不喜欢该路径格式。思考?我已经敲打了一段时间了!
的可能性:
它是AWS的权限吗?如果是这样,为什么其他ruby Gems生成的其他图像文件在同一个AWS桶中打开?
当我将完整路径应用为hack ...我的开发环境的URL格式,只需创建一个变量:hacked_path = "localhost:3000"+file_path
...这会生成Errno :: ENOENT没有这样的文件或目录@ rb_sysopen错误。但我可以在我的网络浏览器中复制/粘贴相同的路径,它会打开一个下载提示。因此,似乎我的浏览器正在拼凑有关如何打开文件的一些信息,但我在我的webapp中调用的Gem并不灵活。我的一个朋友说我的webapp无法在我的本地机器上读取“二进制文件”吗?
这是file.open(filename, 'rb')
与open(filename, 'rb')
的问题吗?我甚至不知道如何修改gem,但我可以向开发人员寻求帮助。
这是因为我的应用在尝试处理文件之前没有足够的时间从AWS下载文件吗?
AWS中的CORS权限?
还有其他更简单的我没有想到的?
提前感谢您的帮助和反馈!是的我知道我需要更多的编程基础课程。您推荐的任何在线产品?已经从一个月开始了。