我试图使用from PyPDF2 import PdfFileReader
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
label_list = []
def get_info(path):
with open(path, 'rb') as f:
pdf = PdfFileReader(f)
info = pdf.getDocumentInfo()
label_list[0].config(text=pdf.getNumPages())
label_list[1].config(text=info.author)
label_list[2].config(text=info.creator)
label_list[3].config(text=info.producer)
label_list[4].config(text=info.subject)
label_list[5].config(text=info.title)
def browsefunc():
filename = filedialog.askopenfilename()
pathlabel.config(text=filename)
get_info(filename)
browsebutton = tk.Button(root, text="Browse", command=browsefunc)
browsebutton.pack()
pathlabel = tk.Label(root)
pathlabel.pack()
for i in range(6):
label_list.append(tk.Label(root, text=""))
label_list[i].pack()
root.mainloop()
连接到我的redshift数据库,我编写了一个简单的类,该类连接到数据库并执行选择查询。我创建了一个简单的gradle项目,该项目创建了胖子罐。
当我在本地计算机上运行它时,一切正常。但是,当我将其部署到AWS Lambda时,它给了我以下错误
com.amazon.redshift.jdbc.Driver
我不确定为什么同一个jar在本地而不在AWS lambda中工作。下面是代码
{
"errorMessage": "No suitable driver found for jdbc:redshift://xyz/xyz",
"errorType": "java.sql.SQLException",
"stackTrace": [
"java.sql.DriverManager.getConnection(DriverManager.java:689)",
"java.sql.DriverManager.getConnection(DriverManager.java:208)",
"test.DatabaseConnector.grab(DatabaseConnector.kt:204)",
"test.DatabaseConnector.generateHTMLReport(DatabaseConnector.kt:271)",
"test.DatabaseConnector.sendReport(DatabaseConnector.kt:606)",
"test.HelloWorldLambda.runReport(HelloWorldLambda.kt:15)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"
]
}
有人可以帮助解决此问题吗?
答案 0 :(得分:2)
如果您使用的是Maven,请确保使用redshift-jdbc42-no-awssdk
。另外,显然在特定的1.2.10.1009版本中存在一个错误,请查看here。
唯一可行的版本似乎是“ 1.2.8.1005”,它是Maven存储库中最旧的可用版本。
您需要做的另一件事是确保jar文件需要是一个所谓的“胖jar”,其中将包含应用程序的所有依赖项。
您可以使用maven-assembly-plugin
作为包装生命周期来制作一个胖子罐:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>Handler</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 1 :(得分:1)
我在ECS任务中遇到此错误,驱动程序已经捆绑在jar中,它是一个Spring Boot应用程序。容器在开发机器上运行正常,但在ECS中失败。事实证明,@ Ali Niaki的回答很有帮助,我尝试更改版本号,但我没有降级,而是升级到了较新的版本。
AWS似乎没有使文档保持发行版本的更新。因此,请使用其文档中的存储库:http://redshift-maven-repository.s3-website-us-east-1.amazonaws.com/release,找到最新版本并改用它。在撰写本文时,ECS中正在运行的最新版本是“ redshift-jdbc42-1.2.18.1036”。 AWS redshift文档仍然提到:'1.2.10.1009',这引起了问题。